Mysql笔记
一.数据库基本操作
1.mysql -h localhost -u root -p
2.每次输入以;号结束,中途若有错误输入\c撤销本次输入,开始新的输入。
3.auto_increment 默认从1开始自增。
4.查看全部数据库。
show databases;
5.使用某个数据库。
use dbname;
6.查看当前数据库说有表。
SHOW TABLES;
二.数据表的基本操作
1.使用主键约束
(1).单字段主键
①.在定义列的同时指定主键。
create table tb_emp
(
id int(11) primary key,
name varchar(25),
deptId int(11),
salary float
);
②.在定义完所有列之后指定主键。
create table tb_emp
(
id int(11),
name varchar(25),
deptId int(11),
salary float,
primary key(id)
);
(2).多字段联合主键(主键由多个字段联合组成)
create table tb_emp
(
id int(11),
name varchar(25),
deptId int(11),
salary float,
primary key(id,deptId)
);
2.使用外键约束
[CONSTRAINT] FOREIGN KEY 字段名1 [,字段名2,...]
REFERENCES 主键列[,主键列2,]
“外键名”为定义的外键约束的名称,一个表中不能有相同名称的外键,”字段名”表示字表需要添加外键约束的字段列;”主表名”即被字表外键所依赖的表的名称;“主键列”表示主表中定义的主键列,或者列组合。
3.使用非空约束
非空约束指字段的值不能为空。
4.使用唯一性约束
唯一性约束要求该列唯一,允许为空,但只能出现一个空值,唯一性约束可以确保一列或者几列不出现重复值。
(1).在定义完列之后直接指定唯一约束。
create table tb_dept
(
id int(11) primary key,
name varchar(22) unique,
location varchar(50)
);
(2).在定义完所有列之后指定唯一约束.
语法规则: [CONSTRAINT ] UNIQUE ()
create table tb_dept
(
id int(11) primary key,
name varchar(22),
location varchar(50),
CONSTRAINT STH UNIQUE(name)
);
UNIQUE和PRIMARY KEY的区别:一个表中可以有多个字段声明为UNIQUE,但只能有一个PRIMARY KEY声明,声明为PRIMARY KEY的列不允许有空值,但是声明为UNIQUE的字段允许有空值(NULL)存在。
5.使用默认约束
默认约束指定某列的默认值。如男性同学较多,性别就可以默认为男。如果插入一条新的纪录时没有为这个字段赋值,那么系统就会自动为这个字段赋值为男。
语法规则: 字段名 数据类型 DEFAULT 默认值
例:
CREATE TABLE tb_emp
(
id int(11) primary key,
name varchar(25) not null,
deptId int(11) default 1111,
salary float
);
6.设置表的属性值自动增加
Mysql中,AUTO_INCREMENT 的初始值为1,每新增一条记录,字段值自动加1.
语法规则:字段名 数据类型 AUTO_INCREMENT
CREATE TABLE tb_emp
(
id int(11) primary key auto_increment,
name varchar(25) not null,
deptId int(11),
salary float
);
7.查看数据表结构
查看表基本结构语句DESCRIBE/DESC
语法规则: DESCRIBE 表名
或简写为: DESC 表名
8.查看表详细结构语句 SHOE CREATE TABLE
语法格式:
SHOW CREATE TABLE表名\G
如果不加’\G’参数,显示的结果可能非常混乱,加上参数’\G’之后,可使显示结果更加直观,易于查看。
9.修改数据表
修改表指的是修改数据库中已经存在的数据表的结构。
①.修改表名
alter table旧表名 rename 新表名;
在此之前,可通过SHOW TABLES;查看当前数据库中所有存在的表。
②.修改字段的数据类型
语法规则:
alter table表名 modify 字段名 数据类型;
在此之前,可通过desc 表名;查看表结构。
例:alter table tb_dept1 modify name varchar(30);
10.修改字段名
语法规则:
alter table表名 change 旧字段名 新字段名 新数据类型;
例子: alter table tb_dept1 change location loc varchar(50);
change也可以只修改数据类型,实现和modify同样的效果,方法是将SQL语句中的新字段名和旧字段名设置为相同的名称,只改变数据类型。
11.添加字段
alter table表名 add 新字段名 数据类型;
12.删除字段
alter table表名 drop 字段名;
13.修改字段的排列位置
alter table表名 modify 字段1 数据类型 first|after 字段2;
①.修改字段为表的第一个字段
alter table tb_dept1 modify column1 varchar(20) first;
②.修改字段到表的指定列之后
alter table tb_dept1 modify column1 varchar(12) after location;
14.更改表的存储引擎
语法规则:
alter table表名 engine=更改后的存储引擎名;
通过SHOW ENGINES;查看支持的引擎名。
15.删除表的外键约束
alter table表名 drop foreign key外键约束名;
16.删除数据表
①.删除没有被关联的表
drop table [if exists]表1,表2...;
例子:drop table if exists tb_dept;
②.删除被其他表关联的主表
三.数据类型和运算符
1.整数类型
create table tb_emp1
(
id int(11),
name varchar(25),
deptId int(11),
salary float
);
id字段的数据类型为INT(11),注意到后面的数字11,这表示的是该数据类型指定的显示宽度,指定能够显示的数值中数字的个数。显示宽度和数据类型的取值范围是无关的。显示宽度只是指明Mysql最大可能显示的数字个数,数值的位数小于指定的宽度时会由空格填充;如果插入了大于显示宽度的值,只要该值不超过该类型整数的取值范围,数值依然可以插入,而且能够显示出来。
2.浮点数类型和定点数类型
Mysql中使用浮点数和定点数来表示小数。浮点类型有两种:单精度浮点类型(float)和双精度浮点类型(double)。定点类型只有一种:DECIMAL.浮点类型和定点类型都可以用(M,N)来表示,其中M称为精度,表示总共的位数;N称为标度,表示小数的位数。
3.日期和时间类型
YEAR
TIME
DATETIME
TIMESTAMP
4.文本字符串类型
char(M)
VARCHAR(M)
TINYTEXT
TEXT
MEDIUMTEXT
LONGTEXT
ENUM
SET
①.char和varchar类型
char(M)为固定长度字符串,在定义时指定字符串列长。当保存时右侧填充空格以达到指定的宽度。M表示列长度,M的范围是0~255个字符。例如,char(4)定义了一个固定长度的字符串列,其包含的字符个数最大为4,当检索到CHAR值时,尾部的空格将被删除掉。
varchar(M)表示长度可变的字符串,M表示最大列长度。M的范围是0~65535.varchar的最大实际长度由最长的行的大小和使用的字符集确定,而其实际占用的空间为字符串的实际长度加1.例如,varchar(50)定义了一个最大长度为50的字符串,如果插入的字符串只有10个字符,则实际存储的字符串为10个字符和一个字符串结束字符。varchar在值保存和检索时尾部的空格仍保留。
②.TEXT类型
TEXT列保存非二进制字符串,如文章内容,评论等。当保存或查询TEXT列的值时,不删除尾部空格。Text类型分为4种:TINYTEXT,TEXT,MEDIUMTEXT,和
LONGTEXT.不同的TEXT类型的存储空间和数据长度不同。
③.ENUM类型
④.SET类型
⑤.二进制字符串类型
Mysql中的二进制有:
BIT,BINARY,VARBINARY,TINYNLOB,BLOB,MEDIUMBLOB和LONGBLOB.
2.数据类型的选择
①.整数和浮点数
对于浮点数据列,存入的数值会对该列定义的小数位进行四舍五入。例如,如果列的值的范围为1~99999,若使用整数,则MEDIUMINT UNSIGNED是最好的类型;若需要存储小数,则使用float类型。
浮点类型包括FLOAT和DOUBLE类型。DOUBLE类型精度比FLOAT类型高,因此,如果要求存储精度高时,应选择DOUBLE类型。
②.浮点数和定点数
浮点数FLOAT,DOUBLE相对于定点数DECIMAL的优势是:在长度一定的情况下,浮点数能表示更大的数据范围,但是由于浮点数容易产生误差,因此对精确度要求较高时,建议使用DECIMAL来存储。DECIMAL在Mysql中是以字符串存储的,用于定义货币等对精确度要求较高的数据。
③.日期与时间类型
如果只需要记录时间,只需要TIME类型即可。
如果只需要记录年份,则使用YEAR类型即可。
如果需要同时记录日期和时间,则可以使用DATETIME和TIMESTAMP类型。由于TIMESTAMP列的取值范围小于DATETIME的取值范围,因此存储范围较大的日期最好使用DATETIME.
TIMESTAMP也有一个DATETIME不具备的属性。默认的情况下,当插入一条记录但并没有指定TIMESTAMP这个列值时,Mysql会把TIMESTAMP列设为当前时间。因此当需要插入记录同时插入当前时间时,TIMESTAMP是方便的,另外TIMESTAMP在空间上比DATETIME更有效。
④.CHAR和VARCHAR之间的特点与选择
CHAR是固定长度,VARCHAR是可变长度字符;
CHAR会自动删除插入数据的尾部空格,VARCHAR不会删除尾部空格。
对于InnoDB存储引擎:使用可变长度的数据列,因为InnoDB数据表的存储格式不分固定长度和可变长度,因此使用char不一定比使用varchar更好,但由于varchar是按照实际的长度存储,比较节省空间,所以对磁盘I/O和数据存储总量比较好。
⑤.ENUM和SET
⑥.BLOB和TEXT
BLOB是二进制字符串,TEXT是非二进制字符串,两者均可存放大容量的信息。BLOB主要存储图片,音频信息等。而TEXT只能存储纯文本文件。
四.MySQL函数
1.日期和时间函数
①.获取当前日期的函数
CURDATE()和CURRENT_DATE()函数作用相同。
②.获取当前时间的函数
CURRENT_TIMESTAMP(),LOCALTIME(),NOW()和SYSDATE() 4个函数的作用相同,均返回当前日期和时间值。
③.UNIX时间戳函数
④.返回UTC日期的函数和返回UTC时间的函数
UTC_DATE()函数返回当前UTC(世界标准时间)日期值。
UTC_TIME()返回当前UTC时间值。
⑤.获取月份的函数MONTH(date)和MONTHNAME(date)
MONTH(date)函数返回date对应的月份。
MONTHNAME(date)函数返回日期date对应月份的英文全名。
⑥.获取星期的函数DAYNAME(d),DAYOFWEEK(d)和WEEKDAY(d)
DAYNAME(d)函数返回d对应的工作日的英文名称,例如Sunday,Monday.
DAYOFWEEK(d)函数返回d对应的一周中的索引,1表示周日,2表示周一。
WEEKDAY(d)返回d对应的工作日索引,0表示周一,1表示周二。
⑦.周期星期数的函数WEEK(d)和WEEKOFYEAR(d)
WEEK(d)计算日期d是一年中的第几周。
WEEKOFYEAR(d)计算某天位于一年中的第几周。
⑧.获取天数的函数DAYOFYEAR(d)和DAYOFMONTH(d)
DAYOFYEAR(d)函数返回d是一年中的第几天。
DAYOFMONTH(d)函数返回d是一个月中的第几天。
d为日期。