Heim > Datenbank > MySQL-Tutorial > day11 mysql基础及乱码有关问题

day11 mysql基础及乱码有关问题

WBOY
Freigeben: 2016-06-07 16:25:15
Original
1000 Leute haben es durchsucht

day11 mysql基础及乱码问题 day11 -- day16 MySQL 数据库 练习SQL语句 JDBC编程 关系化数据模型? 常见关系化数据库有哪些? 收费产品 免费产品 Microsoft SQL Server : 微软公司产品,中等规模数据库 收费产品,运行在windows平台上 --- .net平台+SQLServer

day11 mysql基础及乱码问题

day11 -- day16 MySQL 数据库 练习SQL语句 JDBC编程

关系化数据模型?

常见关系化数据库有哪些?
收费产品
免费产品

Microsoft SQL Server : 微软公司产品,中等规模数据库 收费产品,运行在windows平台上 --- .net平台+SQLServer进行开发
Oracle :甲骨文公司产品,大型商业数据层,收费 运行在任何操作系统上 windows linux --- Oracle收购sun(Java) ---- Java +? Oracle
MySQL :最初是一个开源免费数据库产品 ,中小型数据库 ---- 互联网行业主流数据库? Mysql被Oracle收购后,Mysql6.0开始推出收费版本---- 企业主流5.X
SYBASE:收费,中型数据库,银行证券 ----- PowerDesigner PD (数据库设计建模软件)
HSQL : 迷你数据库 开源免费,纯java开发 ----- 被java开源框架内置使用
SQLITE : 嵌入式开发,Android 内部主要数据库 ---- 开源免费
DB2 : IBM产品 大型数据库 ---- BEA 被Oracle weblogic+ Oracle? ----- websphere + DB2

下载Mysql ----- Oracle网站、开源社区下载
版本:5.X版本(5.0 、5.5 )

安装MySQL
卸载
1、在控制面板 卸载mysql程序
2、手动删除mysql目录

安装
1、安装mysql ---- 修改安装路径
2、安装结束后,一定要对mysql进行配置
修改mysql默认字符集 Latin1(就是ISO-8859-1) ---- 设置utf-8
将mysql安装window服务 ---- 通过服务启动mysql数据库
将mysql/bin 放入环境变量path? ----- 勾选
设置mysql超级管理员 root 用户密码

3、安装mysql后,通过运行 services.msc
MySQL服务启动,mysql数据库启动了
* 在每次使用mysql之前必须启动mysql

4、在cmd创建 mysql -? 如果命令识别,证明mysql/bin 放入环境变量path
5、连接mysql数据 :
C:\Documents and Settings\seawind>mysql -u root -p
Enter password: ***


将root密码修改 abc
1、停止mysql服务
2、新建cmd窗口 输入 mysqld-nt --skip-grant-tables ----- 窗口阻塞,不要关闭
3、新建窗口登陆mysql 不需要输入密码
use mysql
update user set password = password('abc') where user='root' ;
4、关闭mysql服务窗口 ---- 打开任务管理器关闭mysqld-nt.exe
5、重启mysql服务

安装mysql后,自带两个数据库 mysql、test
mysql 存放数据核心数据 ----- 用户、权限 ...
test 练习数据库, 默认该数据库空的

mysql数据库组成
1、在mysql数据库软件内部创建使用多个数据库 database
2、在每一个数据库database中创建使用多个数据表 table
3、table存放数据记录,一条数据记录,对应java程序中一个对象
4、在数据库中存在很多用户,用户根据相应权限操作数据库或者数据表

SQL 结构化查询语言
1、非过程性语言 ----- 每一条SQL语句都是独立执行的,没有先后依赖关系
int a = 10;
int b = 20;
int c = a+b;
print(c) ;
上面程序典型过程性语言

2、官方提供数据库标准语言 ---- 任何数据库都必须支持SQL语法
* 每个数据都应该提供sql扩展,增强sql过程化编程

SQL分类:数据定义语言 DDL 、数据操纵语言 DML 、数据控制语言 DCL
有人将select查询语句自成一类 数据查询语言 DQL
DDL:数据定义语言,定义、修改、删除 数据库内部结构 ---- 例如 : 对数据库、数据表 以上操作
DML:数据操纵语言 ,对数据表记录 增加、删除、修改
DCL:数据控制语言 用户授权、if 、while、事务管理
DQL:数据查询语言 select查询语句


SQL语句使用:数据库操作SQL 、数据表操作SQL 、数据记录操作SQL

第一部分:数据库 SQL
1、数据库创建 create database 数据库名称;
创建一个名称为mydb1的数据库 ----- create database mydb1;
* 通过show databases; 查看所有数据库

在创建数据库时,为数据库指定字符集及字符集比较方式 ---- 语法: create database 数据库名称 character set 编码集 collate 比较方式;
* 如果不指定字符集和比较方式,使用默认 --- 修改utf-8

---------------------------------------
mysql安装目录
bin ---- mysql执行程序
docs ---- 文档
share --- 各国编码信息
data ---- 存放mysql 数据文件
* 每个数据库 创建一个同名文件夹,.frm 存放table表结构、ibdata1存放mysql中所有数据表数据记录
* 在数据库每个文件夹中存在db.opt ---- 保存数据默认编码集
* win7 数据库文件夹默认?? C:\ProgramData\MySQL\MySQL Server 5.5\data

---------------------------------------

创建一个使用utf8字符集的mydb2数据库 -----? create database mydb2 character set utf8;
创建一个使用utf8字符集,并带校对规则的mydb3数据库 ----- create database mydb3 character set utf8 collate utf8_unicode_ci;
* 什么是校对规则? 用于排序? 对张三和李四排序,按照拼音排序、按照笔画排序,按照名字数量
* 一个字符集对应很多校对规则

2、查看和删除数据库
查看当前数据编码集 show create database 数据库名;
查看前面创建的mydb2数据库的定义信息 ----- show create database mydb2;

删除数据库:drop database 数据库名称;
删除前面创建的mydb1数据库 ----- drop database mydb1;

3、修改数据库编码
语法: alter database 数据库名称 character set 编码集;

将mydb2 数据库编码集设置gbk -------------? alter database mydb2 character set gbk;

4、切换数据库
如果想对数据库中数据表和数据记录进行操作,必须先切换到指定数据库 ---- use 数据库名称;
查看当前正在使用数据库 select database();

第二部分:数据表table ---- 表结构SQL
1、创建数据表 create table 表名(列名 类型(长度),列名 类型(长度) ...) character set 编码集;
* 如果不设置编码集,数据表将采用数据库默认字符集

create table users(
?? id int,
?? name varchar(40),
?? password varchar(40),
?? birthday date
);
* 所有数据类型中,除了char 、varchar 必须指定长度,其它类型默认长度


数据库类型
1) 整数类型 tinyint (byte)? smallint(short) int(int) bigint(long) float double
2) 字符串类型 varchar char 长度取值0-255? ---- String?
varchar变长 varchar(20) 向数据库存入hello ,因为变长,列长度会根据保存内容自动调整
char定长 char(8) ---- 向数据库存入hello 因为定长 保存hello + 3个空格
* varchar经常使用,char性能更好
3) 逻辑性 bit 一位 --- boolean *bit(8)表示8位 等于tinyint ,bit(32) 等于int
4) 日期型 date time datetime timestamp
date 只能保存日期
time 只能保存时间
datetime 日期和时间都有
timestamp 日期和时间都有,自动更新 ---- 操作数据表,timestamp字段自动更新当前时间

5) 大数据类型 text、blob
text 文本类型数据,主要存储字符文件 --- 文本文件
blob 二进制文件 ,存储任何类型文件(音乐、电影)
* blob和text最大类型 longtext longblob 最大可以保存4GB文件

GB = 1024MB MB=1024KB KB=1024Byte


创建一个员工表employee
id?整形
name?字符型
gender?字符型
birthday?日期型
entry_date?日期型
job?字符型
salary?小数型
resume?大文本型

create table employee (
?? id int,
?? name varchar(40),
?? gender varchar(10),
?? birthday date,
?? entry_date date,
?? job varchar(20),
?? salary double,
?? resume longtext
);

2、通过desc语句 查看表结构
语法:desc 表名;

单表约束:主键约束(唯一标识一条记录)? 唯一约束(该字段内容不允许重复) 非空约束(值不能为空)
主键约束----- primary key 不能为空、不能重复
* 主键数字类型,一般设置主键自动增长 mysql设置自动增长 auto_increment
唯一约束 ----- unique 一张表只有最重要那个字段才能作为主键
非空 ----- not null


create table employee (
?? id int primary key not null auto_increment ,
?? name varchar(40) unique not null,
?? gender varchar(10) not null,
?? birthday date not null,
?? entry_date date not null,
?? job varchar(20) not null,
?? salary double not null,
?? resume longtext not null
);

3、数据表修改

向已有数据表添加一列 :alter table 表名 add 列名 类型(长度) 约束;
改变已有数据表一列类型、长度: alter table 表名 modify 列名 类型(长度) 约束;
改变已有数据表一列的名称 : alter table 表名 change 旧列名 新列名 类型(长度) 约束;
删除已有一列 : alter table 表名 drop 列名;
修改表名: rename table 旧表名 to 新表名;
修改表的字符集:alter table student character set utf8;

练习
在上面员工表的基本上增加一个image列 ----- alter table employee add image varchar(255);
修改job列,使其长度为60? ------ alter table employee modify job varchar(60) not null;
删除gender列。------ alter table employee drop gender;
表名改为user。 ----- rename table employee to user;
修改表的字符集为utf8? ----? alter table user character set utf8;
* show create table user;
列名name修改为username ---- alter table user change name username varchar(40) unique not null;

4、数据表删除
语法: drop table 表名;
* show tables; 查看当前数据 中所有表

第三部分:对数据表中数据记录 进行 增删改查
1、表记录的插入
语法:insert into 表名(列名,列名,? .... ) values(值, 值, ....)
* 值个数应该列个数相同,值顺序和列顺序相同,值类型和列字段类型匹配

步骤
1) 启动cmd窗口
2) mysql -u root -p 回车 输入密码
3) 创建数据库 day11 ------ create database day11 ;
* show databases ; 查看当前所有数据库
* show create database day11 ;
4) 创建数据表 ,先切换数据库? use day11;
* select database();
5) 创建数据表
create table employee (
?? id int primary key not null auto_increment ,
?? name varchar(40) unique not null,
?? gender varchar(10) not null,
?? birthday date not null,
?? entry_date date not null,
?? job varchar(20) not null,
?? salary double not null,
?? resume longtext not null
);
* desc employee; 查看表结构
6) 插入数据
insert into employee(id,name,gender,birthday, entry_date,job,salary,resume) values(null,'zs','male','1990-01-10','2012-10-10','hr',3000,'He is a good man!');
* 插入数据时,字符串添加 单引号 ''?? ----? 字符和日期型数据应包含在单引号中
insert into employee(id,name,gender,birthday, entry_date,job,salary,resume) values(null,'lisi','male','1980-01-10','2000-10-10','manager',8000,'He is a very good man!');

insert into employee values(null,'wangwu','female','1977-10-08','1999-11-12','BOSS',100000,'He is BOSS');

* 在插入数据时,如果有些列存在默认值或者可以为null ,插入省略部分列 。
create table person(
??? id int primary key not null auto_increment,
??? name varchar(40) not null,
??? introduce varchar(255)
);

insert into person(name) values('zs'); --- 这里只要写不能为空列 就可以了

* 再插入语句时,省略所有列名
insert into person values(null,'lisi',null); ---- 省略所有列名,必须为所有列提供value值,按照数据表中列顺序

* 插入数据后,通过select * from 表名; -------? 查询插入的数据

插入数据时,中文乱码问题
insert into employee values(null,'小丽','female','1995-10-08','2015-11-12','Sales',2000,'是一个有潜质的女孩子!');
* 查看数据库相关编码集 show variables like 'character%';
* 使用mysql客户端 --- 黑色窗口界面使用gbk输入方式

mysql有六处使用了字符集,分别为:client 、connection、database、results、server 、system。
服务器端相关:database server system(永远无法修改 就是utf-8)
客户端相关 connection client results
解决插入乱码问题:将客户端相关三个编码集设置 gbk
set names gbk; ----- 快速设置客户端相关三个编码集 (临时设置当前窗口编码集)

修改mysql 配置文件,永久改变客户端编码集 ----- mysql/my.ini
[mysql] ---- 客户端配置
[mysqld] ---- 服务器端配置

2、数据表记录修改操作 update 语句
语法: update 表名 set 列名=值,列名=值 where条件语句

* 没有where语句,对所有数据行进行更新
update employee set salary = 5000 ; ---- 修改所有员工工资5000

练习
将所有员工薪水修改为5000元。 ------? update employee set salary = 5000 ;
将姓名为’zs’的员工薪水修改为3000元。update employee set salary = 3000 where name = 'zs';
* update employee set salary = 3000 where binary name = 'ZS';? ---- 条件比较前添加 binary 使比较更加精确严格
将姓名为’lisi’的员工薪水修改为4000元,job改为ccc。 --------- update employee set salary = 4000, job='ccc' where binary name = 'lisi';
将wangwu的薪水在原有基础上增加1000元。-------? update employee set salary = salary+1000 where name = 'wangwu';

3、数据表记录通过delete语句进行删除
语法:delete from 表名 where 条件语句;

delete from user where password is null;删除密码为空的数据

删除一个表所有记录 truncate 表名; 效果与 delete from 表名;

truncate与delete 使用上区别 ?
truncate 删除记录后不可恢复的,不受事务管理,原理:先删除整个表,重新创建
delete 可以被事务管理 ,在事务中删除数据可以回滚恢复,原理: 一行一行删除数据记录
truncate 删除所有记录性能上 好于 delete
?
练习:
删除表中名称为’zs’的记录 。 ---- delete from employee where name='zs';
删除表中所有记录。? ---- delete from employee;
* 演示 事务的回滚 ,通过delete在事务中删除可以恢复的
mysql> start transaction;
Query OK, 0 rows affected (0.00 sec)

mysql> delete from employee;
Query OK, 3 rows affected (0.00 sec)

mysql> select * from employee;
Empty set (0.00 sec)

mysql> rollback;

使用truncate删除表中记录。-----truncate employee;? 数据永远删除,不会恢复

?

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage