首页 > 代码库 > MySQL基本命令

MySQL基本命令

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为日期。

MySQL基本命令