mysql

65 阅读5分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第10天,点击查看活动详情

MySQL的语法规范和要求

(1)mysql的sql语法不区分大小写

MySQL的关键字和函数名等不区分大小写,但是对于数据值是否区分大小写,和字符集与校对规则有关。

_ci(大小写不敏感),_cs(大小写敏感),_bin(二元,即比较是基于字符编码的值而与language无关,区分大小写)

(2)命名时:尽量使用26个英文字母大小写,数字0-9,下划线,不要使用其他符号

(3)建议不要使用mysql的关键字等来作为表名、字段名等,如果不小心使用,请在SQL语句中使用`(飘号)引起来

(4)数据库和表名、字段名等对象名中间不要包含空格

(5)同一个mysql软件中,数据库不能同名,同一个库中,表不能重名,同一个表中,字段不能重名

(6)标点符号:

必须成对

必须英文状态下半角输入方式

字符串和日期类型可以使用单引号''

列的别名可以使用双引号"",给表名取别名不要使用双引号。取别名时as可以省略

如果列的别名没有包含空格,可以省略双引号,如果有空格双引号不能省略。

(7)SQL脚本中如何加注释

单行注释:#注释内容

单行注释:--空格注释内容 其中--后面的空格必须有

多行注释:/* 注释内容 */

#以下两句是一样的,不区分大小写
show databases;
SHOW DATABASES;
​
#创建表格
#create table student info(...); #表名错误,因为表名有空格
create table student_info(...); 
​
#其中name使用``飘号,因为name和系统关键字或系统函数名等预定义标识符重名了。
CREATE TABLE t_stu(
    id INT,
    `name` VARCHAR(20)
);
​
select id as "编号", `name` as "姓名" from t_stu; #起别名时,as都可以省略
select id as 编号, `name` as 姓名 from t_stu; #如果字段别名中没有空格,那么可以省略""
select id as 编 号, `name` as 姓 名 from t_stu; #错误,如果字段别名中有空格,那么不能省略""

4.2 SQL分类

DDL (Data Definition Language) :数据定义语言,定义库,表结构等,包括create,drop,alter等

DML (Data Manipulation Language) :数据操作语言,增删改查数据,包括insert,delete,update,select等

DQL(Data query Language):数据查询语言 select

DCL(Data Control Language) :数据控制语言,权限,事务等管理。

4.3 DDL(v1.0)

1、查看所有数据库

show databases;

2、指定使用某个数据库

use 数据库名;

3、创建数据库

create database 数据库名;
​
create database 数据库名 charset 'utf8'; #在mysql中字符集名称不要使用utf-8create database 数据库名 charset 'gbk';

4、删除数据库

drop database 数据库名;

5、查看某个库下的所有表格

show tables ;  #前提是前面有use 数据库名;的语句
show tables from 数据库名;

6、创建表格

create table 【数据名.】表名(
    字段名1 数据类型,
    字段名2 数据类型,
    ....
);
​

7、删除表格

drop table 【数据库名.]表名称;

8、查看某个表结构

describe 【数据库名.]表名称;
desc 【数据库名.]表名称;

9、增加一列

alter table 【数据库名.]表名称 addcolumn】 字段名 数据类型;
alter table 【数据库名.]表名称 addcolumn】 字段名 数据类型 first;
alter table 【数据库名.]表名称 addcolumn】 字段名 数据类型 after 另一个字段;

10、删除一列

alter table 【数据库名.]表名称 dropcolumn】 字段名;

11、修改列数据类型

alter table 【数据库名.]表名称 modify 【column】 字段名 新数据类型;

12、修改列名

alter table 【数据库名.]表名称 change【column】 旧字段名 新字段名 新数据类型;

13、修改列的位置

alter table 【数据库名.]表名称 modify 【column】字段名 数据类型 first;
alter table 【数据库名.]表名称 modify 【column】字段名 数据类型 after 另一个字段;

14、修改表名称

alter table 旧表名 rename 新表名;
rename table 旧表名 to 新表名;

4.4 DML(v1.0)

1、添加数据

insert into 【数据库名.]表名称 values(值列表); 
#要求值列表的顺序、个数、类型,要与表格中的字段的顺序、个数、类型一一匹配
​
insert into 【数据库名.]表名称(部分字段列表) values(值列表);
#要求列表的顺序、个数、类型,要与前面的(部分字段列表)的顺序、个数、类型一一匹配
​
insert into 【数据库名.]表名称 values(值列表1),(值列表2)。。。;
​
insert into 【数据库名.]表名称(部分字段列表) values(值列表1),(值列表2)。。。;
​
insert into [数据库名.]表名 set 字段名=值, 字段名=值......;

2、修改数据

update 【数据库名.]表名称 set 字段名1 = 值1, 字段名2 = 值2 。。。 【where 条件】;

如果没有加where条件,表示修改所有行,这个字段的值

3、删除数据

delete from 【数据库名.]表名称 【where 条件】;

如果没有where条件,表示删除整张表的数据;

truncate 【数据库名.]表名称;#删除整张表的数据,还可以使用这个语句,效率更高,但是它不能回滚

用delete删除整张表和用truncate删除整张表的数据的区别?

(1)truncate速度快

(2)truncate无法回滚

truncate因为底层是把表drop掉,然后新建了一张空表。

delete因为底层是一行一行删数据。

4、简单查询数据

select * from 【数据库名.]表名称; #查询整张表的所有数据select 字段列表  from 【数据库名.]表名称;  #查询部分列表select * from 【数据库名.]表名称 【where 条件】;
​
select 字段列表  from 【数据库名.]表名称 【where 条件】;

使用distinct可以对查询结果进行去重