创建表
语句:
create table <table name> (ColumnName1 ColumnType1, ColumnName2 ColumnType2,…….);
解释:小括号内每一个列名对应一个属性, 依次延伸。
结果:Query OK, XXXXXXX
查看表的定义
语句1:desc <table name>;
结果1:输出内容
语句2:show create table <table name> \g;
解释:\g含义是使记录按照字段竖着排列,方便显示
结果2:输出内容
两语句不同之处:语句2内容比较全面,
删除表
语句:drop table <table name>;
结果:Query OK, XXXXXXXXXXXXXXXX
修改表类型
语句1:alter table <table name> modify <ColumnName> <ColumnType>;
结果1:Query OK, XXXXXXXXXXXXXX
语句2:
alter table <table name> modify <ColumnName> <ColumnType> first;
解释2:修改后将该表的位置调整到最前面
结果2:Query OK, XXXXXXXXXXXXXX
语句3:
alter table <table name> modify <ColumnName> <ColumnType> after <OtherColumnName>;
解释3:修改后将该表的位置调整到OtherColumnName的表后面
结果3:Query OK, XXXXXXXXXXXXXX
增加表字段
语句:alter table <table name> add column <ColumnName> <ColumnType>;
结果:Query OK, XXXXXXXXXXXX
语句2:
alter table <table name> add <ColumnName> <ColumnType> first;
解释2:添加并将该表的位置调整到最前面
结果2:Query OK, XXXXXXXXXXXXXX
语句3:
alter table <table name> add <ColumnName> <ColumnType> after <OtherColumnName>;
解释3:添加并将该表的位置调整到OtherColumnName的表后面
结果3:Query OK, XXXXXXXXXXXXXX
删除表字段
语句:alter table <table name> drop column <ColumnName>;
结果:Query OK, XXXXXXXXXXXX
表字段改名
语句:
alter table <table name> change <ColumnName> <NewColumnName> <NewColumnType>;
结果:Query OK, XXXXXXXXXXXX
注意:change 和 modify都可以修改表的定义, 但是前者可以修改列的名称, 后者不可以。
语句2:
alter table <table name> change <ColumnName> <ColumnType> first;
解释2:修改并将该表的位置调整到最前面
结果2:Query OK, XXXXXXXXXXXXXX
语句3:
alter table <table name> change <ColumnName> <ColumnType> after <OtherColumnName>;
解释3:修改并将该表的位置调整到OtherColumnName的表后面
结果3:Query OK, XXXXXXXXXXXXXX
修改表名
语句:alter table <table name> rename <new table name>;
结果:Query OK, XXXXXXXXXXXXXX
字段约束
NULL、NOT NULL、DEFAULT、AUTO_INCREMENT
NULL:该字段的值可为空
NOT NULL:该字段的值不可为空
create table friends (
id int(3) not null,
name varchar(8) not null,
pass varchar(20) not null,
);
DEFAULT:为该字段提供默认值(插入记录时忘记提供值的时候会使用默认值)
Create table de(id int(3) not null, name varchar(25) not null default ‘No’);
AUTO_INCREMENT:只适用于int字段,每次插入记录时为该字段的值设置为上一台记录的值+1
DML语句
插入记录
语句1:
insert into <table name> (ColumnName1, ColumnName2…….) values(‘value1’, ‘value2’……);
解释:
values里面值的顺序要和ColumnName对应, valuse内’’要加, int类型的不加’’
结果1:Query OK, XXXXXXXXXXX
语句2:insert into <table name> values(‘value1’, ‘value2’……);
解释:
可以不指定字段名, 但values里面值的顺序要和表内字段顺序一样, valuse内’’要加, int类型的不加’’
结果2:Query OK, XXXXXXXXXXXX
语句3:
insert into <table name> (ColumnName1, ColumnName2…….)
values (‘value1’, ‘value2’……), (‘value1’, ‘value2’……), …….;
解释:一次性插入多条记录,values后面每条记录以逗号隔开
结果3:Query OK, XXXXXXXXXXXXXXX
更新记录
语句1:
update <table name> set <ColumnName1> = <value1>, <ColumnName2> = <value2> where <ColumnName> = <value>;
解释:将目标表中列名<ColumnName>的值为<value>的字段的<ColumnNameX>的值修改为<valueX>
结果1:Query OK,XXXXXXXXXXXXX
语句2:
update <table name 1>, <table name 2>, …. set <table name 1>.<ColumnName1> = values1, <table name 2>.<ColumnName2> = values2 where <table name 1>.<ColumnName3> = value3 and <table name 2>.<ColumnName4> = value4;
解释:将<table name 1>中<ColumnName3>的值为value3的字段的<ColumnName1>的值改为valuees1
将<table name 2>中<ColumnName4>的值为value4的字段的<ColumnName2>的值改为valuees2
若有多条要修改的则以逗号分隔开.
结果2:Query OK, XXXXXXXXXXX
语句3:
update <table name 1> <temp name1>, <table name 2> <temp name2>, …. set <temp name1>.<ColumnName1> = values1, <temp name2>.<ColumnName2> = values2 where <temp name1>.<ColumnName3> = value3 and <temp name2>.<ColumnName4> = value4;
解释:同上, 不同的地方在于set后面使用<temp name>代替原本的表名, 这样会更方便一些
结果3:Query OK, XXXXXXXXXXX
删除记录
!!!!!!对于删除操作, 如果不加where则会将表中所有记录删除
语句1:delete from <table name> where <ColumnName> = value;
解释:…….
结果1:从<table name>中将<ColumnName>为value的记录删除
语句2:
delete <temp name1>, <temp name 2> from <table name1> <temp name 1>, <table name2> <temp name 2> where <temp name 1>.<ColumnName1> = value1 and <temp name 2>.<ColumnName2> = value2;
解释:以<temp name 1>代替<table name 1>, <temp name 2>代替<table name 2>, 删除<table name 1>中<ColumnName1>的值为value1的记录和删除<table name 2>中<ColumnName2>的值为value2的记录
一样是以逗号隔开
示例:delete a, b from test a, test2 b where a.Name = ‘asd’ and b.Sex = ‘boy’;
结果2:Query OK, XXXXXXXXXXX
查询记录
语句1:select * from <table name>;
解释: *表示输出查询的表中所有的记录.
结果1:输出结果
语句2:select * from <table name> where <ColumnName> = value;
解释:查询表中所有<ColumnName>的值为value的字段的全部记录, where后用and连接可以增加条件
结果2:输出结果
语句3:select <ColumnName> from <table name>;
解释:查询表中所有的<ColumnName>字段的记录, <ColumnName>可以逗号隔开增加条件
结果3:输出结果
语句N:可以由各种组合达到各种条件的搜索.
查询不重复的记录
语句:select distinct <ColumnName> from <table name>;
解释:去掉和<ColumnName>重复的字段后显示
结果:。。。。。。。
排序和限制
语句1:select * from <table name> order by <ColumnName> {desc/asc};
解释:从<tablie name>中选取全部记录按照<ColumnName>的值排序, 默认升序排序, desc或者asc可以不加入, desc表示降序, asc表示升序, {}不加入
<ColumnName>多条以逗号隔开, 第一条想同则以第二条字段进行排序 以此类推
结果1:……..
语句1:select * from <table name> order by <ColumnName> {desc/asc} limit offset, rowCount;
解释:在排序的基础上添加限制(也可不排序), offset表示在得到的结果偏移的量,比如1表示 从结果的第二个开始显示, rowCount表示要显示的数量., offset可以不填写
结果1:…………..
聚合
语句:select <ColumnName> funName from <table name> {where condition} {group by} {with rollup} {having where contidion};
解释:<ColumnName>可不写, 蓝色的都是可选的, funName的值为: sum(求和)、count(*)(记录数*)、max(最大值)、 min(最小值), group by表示要分类聚合的字段, group by的值是<ColumnName>, with rollup标明是否对分类聚合后的结果再汇总, having表示对分类后的结果再过滤.
结果:…….
表连接
语句:select <ColumnName1>, <ColumnName2> from <table name1>, <table name2> where <condition>;
解释:en ….
结果:……..
语句:select <ColumnName1>, <ColumnName2> from <table name1> left join<table name2> on <condition>;
解释:在 列出所有condition条件下的结果, 并且列出所有<table name1>中的<ColumnName1>即使<ColumnName2>中没有合法的condition, 这个是左连接
结果:……..
语句:select <ColumnName1>, <ColumnName2> from <table name1> right join<table name2> on <condition>;
解释:在 列出所有condition条件下的结果, 并且列出所有<table name2>中的<ColumnName2>即使<ColumnName1>中没有合法的condition, 这个是右连接
结果:……..
子查询
语句:select * from <table name1> where <ColumnName1> in (select <ColumnName2> from <table name2>);
解释:从<table name1>中选取在 <table name2>中选取的<ColumnName2>中的结果存在的<ColumnName1>, 不仅可以有in , 也 可以是 not in、=、!=、exists、not exists等
在子查询记录唯一的时候才可以用=
结果:………………..
记录联合
语句:select * from <table name1> union <all> select * from <table name2>;
解释:从<table name1>和<table name2>中选取结果并一起显示出来, 加all 会显示所有记录, 不加all会自动去除重复的记录。
结果:…………………..