SQL
1.什么是SQL?
Structured Query Language:结构化查询语言
其实就是定义了操作所有关系型数据库的规则。每一种数据库操作的方式存在不一样的地方,称为“方言”。
2.SQL通用语法
1. SQL 语句可以单行或多行书写,以分号结尾。
2. 可使用空格和缩进来增强语句的可读性。
3. MySQL 数据库的 SQL 语句不区分大小写,关键字建议使用大写。
4. 3 种注释
* 单行注释: -- 注释内容 或 # 注释内容(mysql 特有)
* 多行注释: /* 注释 */
3. SQL分类
1)DDL(Data Definition Language)数据定义语言
用来定义数据库对象:数据库,表,列等。关键字:create, drop,alter 等
2) DML(Data Manipulation Language)数据操作语言
用来对数据库中表的数据进行增删改。关键字:insert, delete, update 等
3) DQL(Data Query Language)数据查询语言
用来查询数据库中表的记录(数据)。关键字:select, where 等
4) DCL(Data Control Language)数据控制语言(了解)
用来定义数据库的访问权限和安全级别,及创建用户。关键字:GRANT, REVOKE 等
操作数据库 表
创建表
语法:
create table 表名(
字段名 数据类型 [字段特征] [default修饰的默认值],
字段名 数据类型 [字段特征] [default修饰的默认值],
...
字段名 数据类型 [字段特征] [default修饰的默认值],
)
1 create table student(
2 id int,
3 sname char(10)
4 gender char(10),
5 )
注意:创建最后一行字段名不需要加逗号
查看表结构
1 create table student(
2 id int,
3 sname char(10)
4 gender char(10),
5 )
6// 查看表结构
7 desc student;
查看表中所有数据
1 //查看表中所有数据
2 语法:
select * from 表名;
3 select * from student;
添加数据
# primary key (关键字)
# 表示为标识的列,为主键列,该列不空且不能重复
# 场景1
# 在非主键表里添加记录
# insert 语法
# insert into 表名(字段列表) values(列值列表);
# 此表无主键,mysql内核会自动分派一个伪列(_row_id)
insert into student (id,sname,gender) values (1,'张三','男');
select * from student;
# 场景2
# 当表名后的字段列表不是默认的列表时,values的列值列表必须与其保持一致
insert into student (id, gender,sname) values ('李四',1,'男');
select * from student;
#场景3
# 当表名后的字段列表省略不写时,values后的列值列表必须与创建表时的字段列表顺序一致
insert into student values (2,'王五','女');
select * from student;
# 场景5
# 当values后的列值列表未给值时,则默认使用null填充
insert into student(id,sname) values (3,'麻六');
select * from student;
# 设置默认值
create table student02(
id int not null ,
sname char(10) not null default '',
gender char(4) not null default '男',
primary key(id)
)
desc student02;
select * from student02;
# 创建联合主键:(由多于1个字段组成的主键)
create table foreignPerson(
firstName char(20),
lastName char(20),
gender int , age int ,
primary key (firstName,lastName)
)
desc foreignPerson;
insert into foreignPerson values('弗拉基米尔','帕柳卡',1,30);
select * from foreignPerson;
# 场景5:创建带自增的主键
create table student03(
id int primary key auto_increment,
sname varchar(20),
age int
)
insert into student03(id,sname,age) values (1,'张三',18);
insert into student03 values (0,'李四',19);
insert into student03 values (0,'王五',20);
select * from student03;
# 场景6-1:批量添加数据
insert into student03(id,sname,age) values (5,'麻六',21);
insert into student03(id,sname,age) values (0,'狗七',22);
insert into student03(id,sname,age) values (0,'老八',23);
select * from student03;
# 场景6-2:批量添加数据
insert into student03(id,sname,age) values (0,'喜九',24),(0,'吃十',25);
select * from student03;
修改数据
# 场景7-1:修改表--添加字段
alter table student03 add birthday date;
alter table student03 add gender char(10);
desc student03;
# 场景7-2:修改表--修改记录
update student03 set gender = '男' where sname = '张三';
select * from student03;
update student03 set birthday = '2000-2-18'where id = 2;
select * from student03;
# 场景7-3:修改表--修改字段类型
alter table student03 modify sname char(30);
desc student03;
# 场景7-4:修改表--删除字段
alter table student03 drop gender;
删除数据
# 场景8-1: 删除记录
delete from student03 where id > 6;
select * from student03;
# 场景9-1:截断表(当全表删除时,且数据量特别大时,非常有效),保留表结构
truncate table student03;
desc student03;
select * from student03;
# 场景9-2 :删除记录
show tables;
select * from student;
drop table student;
# 场景9-3:
delete 、drop、truncate区别
delete :删除满足条件的记录
drop: 删除表+全部记录
truncate:删除全部记录,但保留表结构