sql主要分为三类:DDL(data definition Language 数据库定义语句) 、DML(data manipulation language 数据库操纵语句)、DCL(data control language 数据库空中孤语句)。
DDL
1.展示系统中的所有数据库
show databases;
2.创建数据库
create database 数据库名;
3.使用数据库
use 数据库名;
4.删除数据库
drop database 数据库名
5.显示数据库中所有表
show tables;(首先你要先使用你要显示的表所在的数据库)
6.创建表
create table 表名( 列名1 类型1,列名2 列类型2... 列名n 列类型n);
7.查看表的信息
desc 表名;
create table set1(s set('a','b','c','d','e','f'));
虽然 desc 可查看表的定义,但是其输出信息不够全面,下面的命令可以看你表的定义的sql 语句--
8.show create table 表名 \g;
9.删除表
drop table 表名;
10.修改表
- alter table 表名 modify 列名 列的新定义;//修改表
- alter table 表名 add 列名 列类型; //增加表的字段
- alter table 表名 drop column 列名;//删除表的字段
- alter table 表名 change 旧列名 新列名;//修改列名
- alter table 表名 add 新列名 after 排在某个旧列名之后的列名;
- alter table 表名 modify 列名 列类型 first;//将某列放在最前面
- alter table 表名 rename 新表名;//修改表名
create table set1(s set('a','b','c','d','e','f')); insert into set1 values('a,b'),('a,b,c'),('a,b,a'),('a,b,a,c'),('1'); select * from set1; drop table set1; create table set1(s set('a','b','c','d','e','f')); insert into set1 values('a,b'),('a,b,c'),('a,b,a'),('a,b,a,c'),('1'); desc set1; show create table set1 \g; alter table set1 modify s set('a','b','c','d','e','f','1','2'); alter table set1 add id int(4) first; alter table set1 add name varchar(24) first; alter table set1 drop column name ; alter table set1 change s s1 set('a','b','c','d','e','f','1'); alter table set1 add name varchar(24) after id; desc set1; alter table set1 modify name varchar(24) first; desc set1; alter table set1 rename se;
DML
- 插入数据:
insert into 表名(列名1,列名2...列名n)values(value1,value2...valuen); 这里也可以不列举列名,但是value 的值必须与表的列一一对应;
create table sonador(id int(8) auto_increment primary key not null, name varchar(20) not null,grade int(8) not null default 0); //default 表示默认值 auto_increment : 自增长 insert into sonador values(1,'aimme',93); insert into sonador(name,grade) values('alice',95); insert into sonador(name) values('andy'); select* from sonador;
一次性插入多条数据
insert into 表名(列名1,列名2,列名3...列名n)values
(value1,value2,value3... valuen),
(value11,value12,value13... value1n)
...
(valuen1,valuen2,valuen3... valuenn);
create table sonador(id int(8) auto_increment primary key not null, name varchar(20) not null,grade int(8) not null default 0); insert into sonador values(1,'aimme',93); insert into sonador(name,grade) values('alice',95); insert into sonador(name) values('andy'); insert into sonador(name,grade) values('a',95),('b',99),('c',100),('d',89),('e',85),('f',88); select* from sonador;
运行结果如下:
- 更新记录
update 表名 set field1=value1,field2=value2,... fieldn=valuen[where conidition];//where 条件语句,以后细说
update sonador set name='duodudo' where id=4;
在mysql中支持同时更新多表数据,语法如下:
update t1,t2,t3...,tn set t1.field1=value1,t2.field2=value2,t3.field3=value3...,t2.fieldn=valuen[where conidition];//where 条件语句,以后细说
create table sonador(id int(8) auto_increment primary key not null, name varchar(20) not null,grade int(8) not null default 0); insert into sonador values(1,'aimme',93); insert into sonador(name,grade) values('alice',95); insert into sonador(name) values('andy'); insert into sonador(name,grade) values('a',95),('b',99),('c',100),('d',89),('e',85),('f',88); update sonador set name='duodudo' where id=4; create table sonador1(id int(8) auto_increment primary key not null, name varchar(20) not null,grade int(8) not null default 0); insert into sonador1(name,grade) values('a',95),('b',99),('c',100),('d',89),('e',85),('f',88); update sonador,sonador1 set sonador.name='lily',sonador1.name='lisa' where sonador.id =2 and sonador1.id=1; select* from sonador; select* from sonador1;
多表同时更新数据多用在更具一个表字段动态更新另一个表字段
- 删除表数据
delete from 表名[where condition];
create table sonador(id int(8) auto_increment primary key not null, name varchar(20) not null,grade int(8) not null default 0); insert into sonador values(1,'aimme',93); insert into sonador(name,grade) values('alice',95); insert into sonador(name) values('andy'); insert into sonador(name,grade) values('a',95),('b',99),('c',100),('d',89),('e',85),('f',88); update sonador set name='duodudo' where id=4; delete from sonador where id=3; select* from sonador;
与update一样,删除数据支持同时删除多表数据
delete from t1,t2,t3...tn [where codition ];
CREATE TABLE student(id INT(8) AUTO_INCREMENT PRIMARY KEY NOT NULL, NAME VARCHAR(20) NOT NULL,grade INT(8) NOT NULL DEFAULT 0,dept INT(5) NOT NULL); CREATE TABLE class(dept INT(5),deptname VARCHAR(18)); INSERT INTO student(NAME,grade,dept) VALUES('a',95,11),('b',99,12),('c',100,10),('d',89,11),('e',85,15),('f',88,14); INSERT INTO class VALUES(10,'vocol'),(11,'cleaning'),(12,'grocery'),(14,'food'),(15,'冷冻'); SELECT* FROM student; SELECT* FROM class;
同时删除表中dept=10的数据:
DELETE a ,b FROM student a ,class b WHERE a.`dept`=b.`dept`AND a.`dept`= 10 ; //a b 是表的别名,如果from后用表的别名,delete后面也要用相应的别名 select* from student; select* from class;
- 查询记录
select * from 表名 [where condition];//最简单的查询,列出表中所有数据--即select * from 表名;
1.查询不重复记录---使用distinct关键字
select distinct 列名1 from 表名;
create table student(id int(8) auto_increment primary key not null, name varchar(20) not null,grade int(8) not null default 0,dept int(5) not null); create table class(dept int(5),deptname varchar(18)); insert into student(name,grade,dept) values('a',95,11),('b',99,12),('c',100,10),('d',89,11),('e',85,15),('f',88,14); insert into class values(10,'vocol'),(11,'cleaning'),(12,'grocery'),(14,'food'),(15,'冷冻'); SELECT DISTINCT dept FROM student;
2.排序和限制
排序:order by 关键字
select * from 表名 [where condition] order by field1 desc(降序)/asc (升序),order by field2 desc(降序)/asc (升序) ...order by fieldn desc(降序)/asc (升序); //此种排序以第一个排序为先,值相同比较第二个字段,以此类推。若都相同则是无序序列。
对于排序后的记录,如果只希望展示一部分,而不是全部,这时就可以使用limit 关键字。
select * from 表名 [where condition] order by field1 desc(降序)/asc (升序) [ limit offset_start (起始偏移量), row_count(显示的行数)];
SELECT * FROM student ORDER BY grade DESC LIMIT 1,4 ;