MYSQL语法规范
不区分大小写,建议关键字大写,表名、列名小写 ,每句话用 ; 结束语句
注释
单行注释:#注释文字
单行注释:-- 注释文字(--和注释文字间须有空格)
多行注释:/* 注释文字 */
创建数据表
前面提到过,数据表是数据库的存储单位,所以数据要在数据库里以表的形式呈现出来,在MYSQL里我们要先创建一个数据库,再建立一个数据表。
![](https://i-blog.csdnimg.cn/blog_migrate/13e0f28046bc9a18a87375c98e620b2a.jpeg)
创建一个数据库
CREATE DATABASE [if not exists] 数据库名 [CHARSET utf8]
代码里的 [if not exists] 可有可无,上述代码意思如果你准备新建的数据库如果不存在,就会创建一个,而去掉if not exists 并不会影响运行结果,只是如果该数据库已存在,那么运行后就会报错。
删除一个数据库
DROP DATABASE 数据库名 / [IF EXISTS}数据库名
[IF EXISTS}和上面效果相同,代码意思如果你要删除的数据库存在,那么就会删除。
修改字符集
ALTER DATABASE 数据库名 CHARSET
修改数据库的字符格式
DDL:
数据(结构)定义语言DDL(Data Definition Language)创建和修改数据库表结构。
常用的语句:create,alter,drop,rename
数据库存储数据的特点
将数据放到表中,表再放到库中 。
即数据库存储单位是表。
一个数据库中可以有多个表,每个表都有一个名字,用来标识自己。表名具有 唯一性。
这里需要注意,表即便创建好后名字仍可以修改,但数据库创建好后名字不可修改。
表具有一些特性,这些特性定义了数据在表中如何存储,类似Java中“类”的 设计。
表由列组成,我们也称列为字段,用于保存每条记录的特定信息 。所有表都是由一个或多个列组
成的,每一列 类似java中的"属性"。数据表的一列包含了特定字段的全部信息。
比如学生信息表里的"姓名",那么这一列包含了字段"姓名"的全部信息。所有学生的姓名肯定都在这一列里面。
表中的数据是按行存储的,表里的一行数据被称为记录,每一行类似于Java中的"对象"。在关系型
数据库的表里,一行数据是指一条完 整的记录。
比如学生信息表,一行就存储了一个学生的姓名,学号,班级,专业等数据,即一条完整的记录。
对于具体的某一个表,在创建之前,需要确定表的下列特征:
表名(表信息)
表中的字段
字段的数据类型和长度
哪些约束
数据类型和长度
char(n) 长度为n的定长字符串
varchar(n) 最大长度为n的可变长字符串
char和varchar最大的区别在于存储空间的差异,比如我现在要确定姓名的类型,令n=5,如果有小于5个字的名字出现,char仍需要占5个字的空间,而varchar则是名字有几个字就占几个字的空间。为了避免空间的浪费,如果一个字段字符串长度不一,就用varchar,比如姓名;字符串长度固定就用char,比如性别。
date 日期, 包含年月日
datetime 年月日 时分
datetime表示的时间更加精准,比如用在停车计时上;date可以用来表示生日,注册日期等。
整数int
![](https://i-blog.csdnimg.cn/blog_migrate/2accf803abd8221afb7c3c3ad4dac155.jpeg)
int可用在年龄,学号,体重等,根据需要选择相应的类型即可,一般INT使用最频繁。
浮点 float,double
![](https://i-blog.csdnimg.cn/blog_migrate/933ecd5fc68f925874697bd109d0720a.jpeg)
浮点格式: 数据类型(M,D)
M:精度,数据的总长度; D:标度,小数点后的长度 建议使用double
比如float(3,1),表示数据总长度为3位,小数点后保留1位。 浮点一般用在更加精确的有小数点的数据上,比如身高,评分等。
TEXT列字符字符串
有4种TEXT类型:TINYTEXT、TEXT、MEDIUMTEXT和LONGTEXT。 它的长度: TINYTEXT:最大长度255个字符(2^8-1) TEXT:最大长度65535(2^16-1) MEDIUMTEXT:最大长度16777215(2^24-1)
LONGTEXT最大长度4294967295(2^32-1)
约束:
主键:
在一张表中代表唯一的一条记录,不能为空,不能重复
可以把表看成一个团队,主键就相当于团队里的老大,一个团队不能没有老大且只能有一个老大。
约束: PRIMARY KEY 设置主键约束 NOT NULL 不能为空约束 UNIQUE 唯一性约束
NOT NULL 和UNIQUE 可以组合使用,效果和主键类似,但主键只能设置一个,而它两的组合可以重复使用。 主键自动增长 AUTO_INCREMENT
我们不需要给主键去插入数据,它会自动填写,和主键约束搭配使用。 默认值 DEFAULT default_value
给字段一个默认值,如果不修改,生成的表对应字段自带默认值。 字段注释: comment '注释'
创建表语法:
CREATE TABLE 表名(列名 数据类型 [约束] [默认值] [注释],......)
现在需要创建一张学生信息表(已经建立好数据库的情况下),首先要给这张表起个名字,比如叫student, 接下来要确定字段即列,比如有号码(num),姓名(name),性别(gender),生日(bir)四个字段,接下来确定字段的数据类型和长度,比如号码用INT,姓名用VARCHAR(5),性别用CHAR(1),生日用DATE,最后确定约束,可以将号码设置成主键,加上主键自动增长。
CREATE DATABASE schooldb/*创建一个数据库*/
CREATE TABLE student(
num INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(5),
gender CHAR(1),
bir DATE
);/*创建学生信息表*/
运行结果如下:
![](https://i-blog.csdnimg.cn/blog_migrate/15b8ae6ae6cb2c95104b778e3be533a2.jpeg)
注意:每次运行后,需要点击左侧相应的上级目录刷新一下,创建数据库后,要选中根目录进行刷新,创建数据表时在左侧选中哪个数据库,数据表就会在它目录下生成。创建数据表后选中相应的数据库刷新
![](https://i-blog.csdnimg.cn/blog_migrate/ad3ab5a069b06c242da34c546d27c79b.jpeg)
红色圈的是运行键,灰色是刷新键
删除表 :
DROP TABLE [if exists ]表名
和删除数据库类似,只是DATABASE(数据库)变成了TABLE(表)
修改表名:
RENAME TABLE 旧表名 TO 新表名
复制表结构:
CREATE TABLE 新表名 LIKE 被复制表名
DML:
数据操纵语言DML(Data Manipulation Language) 常用语句: insert,delete,update
插入数据:
INSERT INTO 表名(列1,列2……,列n) VALUES(值1,值2…..,值n);/*方式1*/
INSERT INTO 表名 set 列名1=值1,..列名n=值n; /*方式2*/
这两种方法适合给单行多列插入数据,可能有一两个需要补充的去添加在表后面。也可以用来变更主键初始值。 方式3:
INSERT INTO 表名(列1,列2……,列n) VALUES(值1,值2…..,值n),(值1,值2….., 值n);
一种表一般都是多行多列的,适合创建表后去插入数据。 方式4:
INSERT INTO 表名(列1,列2……,列n) 查询语句(查询的列数与插入列数匹配)
在刚建立的学生表里插入信息,先用方法一输入一个学生的记录,让号码从我想要的初始值开始递增,后用方法三插入其余学生的记录。
INSERT INTO student(num,NAME,gender,bir)
VALUES(1913014135,'张三','男','2020-12-5')/*方法一*/
INSERT INTO student(NAME,gender,bir)
VALUES('李四','女','2019-5-6'),
('王五','女','2020-9-8'),
('老六','女','2020-7-18'),
('愣子','男','2021-6-6');/*方法三*/
运行结果如图:
![](https://i-blog.csdnimg.cn/blog_migrate/223e476c03d21df5c0dd42bf19a58e27.jpeg)
图1
注意:1.写入方法一的语句时,括号里的列名有num,是因为想要一个增长的初始值,在使用方法三插入其他学生的记录时,因设置了主键的自动增长所以不再需要在括号里的列名添加num。如果不对num列插入初始值,默认从1开始。
2.每段语句写完后记得用;结尾,且注意;位置。MYSQL虽然没有对;硬性要求,但还是要保持一个良好习惯。
3.添加列名的值时,除了数型其余都须加单引号。插入完成后直接对表数据刷新即可。
![](https://i-blog.csdnimg.cn/blog_migrate/4539aa3bbafdddb79f0c9acf7abcc1fd.jpeg)
表数据刷新键
4.不需要整体语句运行时,选中想要运行的语句点击运行即可,比如图1的语句只需要运行插入的语句即可。图1插入语句上面有删除表格语句,如果整体执行会先创建表格后又删除,执行插入语句时就会报错。
修改数据:
UPDATE 表名 SET 列名 = ‘新值’WHERE 条件
如果表中数据很多,恰巧有一个数据记录错了,这时候如果用DROP删掉表格再重新建立插入数据太麻烦,我们只需要运行UPDATE加上条件WHERE的语句即可
比如发现上面学生表里的老六性别被记录错了,现在修改数据
UPDATE student SET gender = '男' WHERE NAME = '老六'
运行结果如下:
![](https://i-blog.csdnimg.cn/blog_migrate/8a0538f2cc04d28d6b1e57ef35e4fabe.jpeg)
注意:这里条件不唯一,也可以用学号或生日判断,只要是老六独有的数据都可。如果表里有重名叫老六,那就不能再使用姓名为判断条件。
删除数据 :
DELETE FROM 表名 WHERE 条件 /*方式1*/
TRUNCATE TABLE 表名;清空整张表 /*方式2*/
如果对DELETE不加条件,那么DELETE也可以做到清空表格。但是DELETE是从DML即数据上清空表格,这时候再往表格里面插入数据会发现新插入的数据是继承之前的数据继续添加,而TRUNCATE是从DDL即表结构上清空表,这时候再插入数据是重新开始。
现在把之前的信息分别用上述方式清空,添加新的数据。
DELETE:
DELETE FROM student;
INSERT INTO student SET NAME='阿牛',gender='男',bir='2023-1-1';
运行结果:
![](https://i-blog.csdnimg.cn/blog_migrate/9e75bfdb47e73df086839ab6aeff7237.jpeg)
可以看到阿牛的号码是接着前面被清除的数据插入的。
TRUNCATE:
TRUNCATE TABLE student;
INSERT INTO student SET NAME='阿牛',gender='男',bir='2023-1-1';
运行结果:
![](https://i-blog.csdnimg.cn/blog_migrate/134aa3a928ea42d9dabbd02a4693599a.jpeg)
可以看到之前插入时设置的主键初始值也被抹除,新插入的数据没有定义主键初始值,阿牛的号码从1开始。