create database 数据库名;
create database 数据库名 character set 字符集;
例:create database databaseName character set ‘utf8’;
databaseName为数据库名称
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| test |
+--------------------+
4 rows in set (0.00 sec)
mysql> show create database test;
+----------+---------------------------------------------------------------+
| Database | Create Database |
+----------+---------------------------------------------------------------+
| test | CREATE DATABASE `test` /*!40100 DEFAULT CHARACTER SET utf8 */ |
+----------+---------------------------------------------------------------+
1 row in set (0.00 sec)
drop database 数据库名名称;
use 数据库名;
mysql> use test;
Database changed
mysql> select database();
+------------+
| database() |
+------------+
| test |
+------------+
1 row in set (0.00 sec)
数字型:int
浮点型:double
字符型:varchar(可变长字符串)
日期类型:date(只有年月日,没有时分秒)
datetime(年月日,时分秒)
boolean类型:不支持,一般使用tinyint替代(值为0和1)
create table 表名(
字段名 类型(长度) 约束,
字段名 类型(长度) 约束
);
1. 主键约束:primary key
2. 唯一约束:unique
3. 非空约束:not null
注意:主键约束 = 唯一约束 + 非空约束
例:
mysql> create table user(
-> id int(16) primary key,
-> name varchar(32),
-> sex varchar(8) unique);
Query OK, 0 rows affected (0.02 sec)
mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| user |
+----------------+
1 row in set (0.00 sec)
mysql> desc user;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id | int(16) | NO | PRI | NULL | |
| name | varchar(32) | YES | | NULL | |
| sex | varchar(8) | YES | UNI | NULL | |
+-------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)
drop table 表名;
#修改表添加列.
1. alter table 表名 add 列名 类型(长度) 约束;
#修改表修改列的类型长度及约束.
2. alter table 表名 modify 列名 类型(长度) 约束;
#修改表修改列名.
3. alter table 表名 change 旧列名 新列名 类型(长度) 约束;
#修改表删除列.
4. alter table 表名 drop 列名;
#修改表名
5. rename table 表名 to 新表名;
#修改表的字符集
6. alter table 表名 character set 字符集;
#删除索引
7. alter table 表名 drop index 列名;
#向表中插入某些列
1. insert into 表 (列名1,列名2,列名3..) values (值1,值2,值3..);
#向表批量插入
2. insert into 表 values (值1,值2,值3..),(值1,值2,值3..),(值1,值2,值3..);
3. insert into 表 (列名1,列名2,列名3..) values select (列名1,列名2,列名3..) from 表
4. insert into 表 values select * from 表
1. insert into user (id ,name ,sex) values (1, '小a', 'woman');
2. insert user values (2, '小b', 'woman'),(3,'小c','man');
update 表名 set 字段名=值,字段名=值;
update 表名 set 字段名=值,字段名=值 where 条件;
delete from 表名 [where 条件];
注意:delete语句表不能使用别名
select * from 表名称 where 查询条件;
select * from `user`;
select `name`, sex from `user`;
user
, name
等。select * from 表名称 where 查询条件 order by 列名 排序规则
排序规则:ASC(升序 小->大) DESC(降序 大 -> )
select * from `user` order by `id` desc;
# sum():求某一列的和
select sum(列名) from 表名;
# avg():求某一列的平均值
select avg(列名) from 表名;
# max():求某一列的最大值
select max(列名) from 表名;
# min():求某一列的最小值
select min(列名) from 表名;
# count():求某一列的元素个数
select count(1) from 表名;
select count(*) from 表名;
GROUP BY
HAVING
SELECT sex,count(1),avg(age) FROM `user` group by sex;
SELECT sex,count(1),avg(age) FROM `user` group by sex HAVING avg(age) > 10;
1. select语句中的列(非聚合函数列),必须出现在group by子句中
2. group by子句中的列,不一定要出现在select语句中
3. 聚合函数只能出现select语句中或者having语句中,一定不能出现在where语句中。
4. 区别where、group by、having。
lIMIT [offset,] rows
逻辑分页:将数据库中的数据查询到内存之后再进行分页。
物理分页:通过LIMIT关键字,直接在数据库中进行分页,最终返回的数据,只是分页后的数据。
语法
SELECT * FROM table LIMIT [offset,] rows
说明:
offset:偏移量,即从第几条开始查询;索引从0开始。
rows:当前页几条数据;即查询几条数据。
SELECT DISTINCT
< select_list >
FROM
< left_table > < join_type >
JOIN < right_table > ON < join_condition >
WHERE
< where_condition >
GROUP BY
< group_by_list >
HAVING
< having_condition >
ORDER BY
< order_by_condition >
LIMIT < limit_number >
# 将主表和从表,进行进行笛卡尔积,生成临时表T1
1 FROM <left_table>
# 将T1根据条件过滤,生成临时表T2
2 ON <join_condition>
# 第二步和第三步会循环执行,保留左边的数据T3
3 <join_type> JOIN <right_table>
# 第四步会循环执行,多个条件的执行顺序是从左往右的。循环帅选T4...Tn
4 WHERE <where_condition>
# 根据条件对T4分组,生成临时表T5
5 GROUP BY <group_by_list>
# 分组过滤T5,生成临时表T6
6 HAVING <having_condition>
# T6中映射出结果集临时表,生成临时表T7
7 SELECT 分组之后才会执行SELECT
# 对T7结果集临时表去重,生成临时表T8
8 DISTINCT <select_list>
# T8根据条件排序,生成T9
9 ORDER BY <order_by_condition>
# 堆排序之后的T9分页
10 LIMIT <limit_number> 前9步都是SQL92标准语法。limit是MySQL的独有语法。
1. FROM(将最近的两张表,进行笛卡尔积:行相乘,列相加)---T1
2. ON(将T1按照它的条件进行过滤)---T2
3. LEFT JOIN(保留左表的记录)---T3
4. WHERE(过滤T3中的记录)--T4…VTn
5. GROUP BY(对T4的记录进行分组)---T5
6. HAVING(VT5中的记录进行过滤)---T6
7. SELECT(VT6中的记录,选取指定的列)--T7
8. DISTINCT(对T7去重)--T8
9. ORDER BY(对T8的记录进行排序)--T9
10. LIMIT(对排序之后的值进行分页)--MySQL特有的语法
熟悉Sql执行顺序,使开发者写Sql语句更得心应手;易于写出可读,性能高的sql语句。
alter table 表名 add [constraint][约束名称] foreign key (主表外键字段) references 从表(从
表主键)
例子:为表hushband字段wid添加外键,主键为表wife的字段id
alter table husband add foreign key (wid) references wife(id);
alter table 表名 drop foreign key 外键约束名称