针对数据库的增删改查:
#语法
CREATE DATABASE 数据库名
mysql> CREATE DATABASE DD1
>>> Query OK, 1 row affected (0.00 sec)
CREATE DATABASE 数据库名 charset = "指定编码格式"
#语法
SHOW DATABASES #查询所有数据库
SHOW DATABASES;
>>>
+--------------------+
| Database |
+--------------------+
| db1 |
| DBT1 |
| DD1 |
| information_schema |
| mysql |
| performance_schema |
| sys |
| testdb2 |
+--------------------+
8 rows in set (0.01 sec)
#语法
DROP DATABASE 数据库名;
>>>
sql> DROP DATABASE DD1;
Query OK, 0 rows affected (0.01 sec)
针对表的增删改查
增加表
create table t1(id int,name char(4))
查询表
show tables # 查看当前库下的所有表名
改
alter table t1 rename t2
删
drop table t1
针对表的增删改查
在操作表之前一定要用use语句选择你要操作的数据库
#语法
CREATE TABLE table_name(
字段名1,数据类型[列级别的约束条件][默认值]
字段名2,数据类型[列级别的约束条件][默认值]
字段名2,数据类型[列级别的约束条件][默认值]
·····
);
>>
mysql> CREATE TABLE tb_tese(id int,name char);
Query OK, 0 rows affected (0.01 sec)
#语法
DESCRIBE 表名
>>>
mysql> DESCRIBE tb_tese;
+-------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| id | int | YES | | NULL | |
| name | char(1) | YES | | NULL | |
+-------+- --------+------+-----+---------+-------+
2 rows in set (0.00 sec)
#语法
DROP TABLE 表名
>>>
mysql> DROP TABLE tb_tese;
Query OK, 0 rows affected (0.01 sec)
#语法
ALTER TABLE 旧表名 RENAME 新表名
>>>
mysql> ALTER TABLE tb_tase RENAME tb_alter;
Query OK, 0 rows affected (0.01 sec)
#插曲新表名,看看是否可以查询得到
mysql> DESC tb_alter ;
+-------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| id | int | YES | | NULL | |
| name | char(1) | YES | | NULL | |
| age | char(1) | YES | | NULL | |
+-------+---------+------+-----+---------+-------+
3 rows in set (0.00 sec)
针对数据的增删改查
#语法
SELECT * FROM 表名
>>
mysql> select * from tb_alter;
+------+--------+------+
| id | name | age |
+------+--------+------+
| 1 | 张三 | 14 |
+------+--------+------+
1 row in set (0.00 sec)
#语法
INSERT INTO 表名(字段名1,字段名2···) VALUES (values1,values2···)
>>>
mysql> INSERT INTO tb_alter (id,name,age) values(1,"张三",14);
Query OK, 1 row affected (0.00 sec)
#语法
UPDATE table_name SET field1=new-value1, field2=new-value2
>>>
mysql> UPDATE tb_alter SET name = "lisi";
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
#语法
DELETE FROM 表名 WHERE ClAUSE
>>>
mysql> DELETE FROM tb_alter WHERE ID = 1;
Query OK, 1 row affected (0.00 sec)
类型 | 大小 | 范围(有符号) | 范围(无符号) | 用途 |
---|---|---|---|---|
TINYINT | 1 byte | (-128,127) | (0,255) | 小整数值 |
SMALLINT | 2 bytes | (-32 768,32 767) | (0,65 535) | 大整数值 |
MEDIUMINT | 3 bytes | (-8 388 608,8 388 607) | (0,16 777 215) | 大整数值 |
INT或INTEGER | 4 bytes | (-2 147 483 648,2 147 483 647) | (0,4 294 967 295) | 大整数值 |
BIGINT | 8 bytes | (-9,223,372,036,854,775,808,9 223 372 036 854 775 807) | (0,18 446 744 073 709 551 615) | 极大整数值 |
FLOAT | 4 bytes | (-3.402 823 466 E+38,-1.175 494 351 E-38),0,(1.175 494 351 E-38,3.402 823 466 351 E+38) | 0,(1.175 494 351 E-38,3.402 823 466 E+38) | 单精度 浮点数值 |
DOUBLE | 8 bytes | (-1.797 693 134 862 315 7 E+308,-2.225 073 858 507 201 4 E-308),0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) | 0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) | 双精度 浮点数值 |
DECIMAL | 对DECIMAL(M,D) ,如果M>D,为M+2否则为D+2 | 依赖于M和D的值 | 依赖于M和D的值 | 小数值 |
类型 | 大小 | 用途 |
---|---|---|
CHAR | 0-255 bytes | 定长字符串 |
VARCHAR | 0-65535 bytes | 变长字符串 |
TINYBLOB | 0-255 bytes | 不超过 255 个字符的二进制字符串 |
TINYTEXT | 0-255 bytes | 短文本字符串 |
BLOB | 0-65 535 bytes | 二进制形式的长文本数据 |
TEXT | 0-65 535 bytes | 长文本数据 |
MEDIUMBLOB | 0-16 777 215 bytes | 二进制形式的中等长度文本数据 |
MEDIUMTEXT | 0-16 777 215 bytes | 中等长度文本数据 |
LONGBLOB | 0-4 294 967 295 bytes | 二进制形式的极大文本数据 |
LONGTEXT | 0-4 294 967 295 bytes | 极大文本数据 |
表示时间值的日期和时间类型为DATETIME、DATE、TIMESTAMP、TIME和YEAR。
每个时间类型有一个有效值范围和一个"零"值,当指定不合法的MySQL不能表示的值时使用"零"值。
类型 | 大小 ( bytes) | 范围 | 格式 | 用途 |
---|---|---|---|---|
DATE | 3 | 1000-01-01/9999-12-31 | YYYY-MM-DD | 日期值 |
TIME | 3 | ‘-838:59:59’/‘838:59:59’ | HH:MM:SS | 时间值或持续时间 |
YEAR | 1 | 1901/2155 | YYYY | 年份值 |
DATETIME | 8 | 1000-01-01 00:00:00/9999-12-31 23:59:59 | YYYY-MM-DD HH:MM:SS | 混合日期和时间值 |
TIMESTAMP | 4 | 1970-01-01 00:00:00/2038结束时间是第 2147483647 秒,北京时间 2038-1-19 11:14:07,格林尼治时间 2038年1月19日 凌晨 03:14:07 | YYYYMMDD HHMMSS | 混合日期和时 |
单字段主键是指主键有一个字段组成,SQL语句格式分为以下两种情况
在定义的列的同时定义主键
字段名 数据类型 PRIMARY KEY[默认值]
CREATE TABLE tb_tmp
(
id int(11) PRIMARY KEY,
name varchar(30),
age int(11),
)
在定义所有列之后指定主键
[CONSTRAINT <约束名>] PRIMARY KEY [字段名]
CREATE TABLE tb_emp1
(
id INT(11),
name VARCHAR(30)
PRIMARY KEY(id)
)
多字段联合主键是指主键由多个字段联合组成
PRIMARY KEY[字段1,字段2,···,字段n]
CREATE TABLE tb_emp2
(
id INT(10),
name VARCHAR(25),
depid INT(10),
PRIMARY KEY(id,depid)
)
外键:是表中的一个字段,他可以不是本表的主键,但对应另外一个表的主键。外键的主要作用是保证数完整性,定义外键后不能删除在另一个表中有关联联系的
主表(父表):对于两个有关联关系的表而言,相关联字段中主键所在的哪个表是主表
从表(从表):对于两个有关联关系的表而言,相关联字段中外键所在的哪个表是从表
创建外键的语法规则:
CONSTRAINT <外键名> FOREIGN KEY 字段名1 REFERENCES<主表名> 主键列1
CREATE TABLE tb_emp2
(
id INT(10),
name VARCHAR(25),
depid INT(10),
CONSTRAINT fk_emp2_depid FOREIGN KEY depid REFERENCES tb_emp1 id
ON UPDATE CASCADE id #同步更新
ON DELETE CASCADE id #同步删除
##上述语句执行后就是在表tb_emp上添加了一个名叫fk_emp2_depid的外键约束,外键名称为deptid,它依赖于tb_emp1表中的主键id
)
子键的外键必须关联附表的主键,切挂念字段的数据类型必须陪陪,如果类型不一样,则创建子表时就会出现错误提示
语法规则:
字段名 数据类型 NOT NULL
CREATE TABLE tb_emp2
(
id INT(10),
name VARCHAR(25) NOT NULL,
depid INT(10),
PRIMARY KEY(id,depid)
)
语法规则
(1)字段名 数据类型 UNIQUE
CREATE TABLE tb_emp2
(
id INT(10),
name VARCHAR(25)NOT NULL UNIQUE,
depid INT(10),
PRIMARY KEY(id,depid)
)
(2)CONSTRAINT 约束名 UNIQUE 字段名
CREATE TABLE tb_emp2
(
id INT(10),
name VARCHAR(25)NOT NULL,
depid INT(10),
PRIMARY KEY(id,depid)
CONSTRAINT UU UNIQUE(name)
)
语法规则
字段名数据类型 DEFAULT 默认值
CREATE TABLE tb_emp2
(
id INT(10),
name VARCHAR(25)NOT NULL,
depid INT(10) DEFAULT 111,
PRIMARY KEY(id,depid)
CONSTRAINT UU UNIQUE(name)
)
语法规则
字段名 数据类型 AUTO_INCREMENT
CREATE TABLE tb_emp2
(
id INT(10)PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(25)NOT NULL,
depid INT(10) DEFAULT 111,
PRIMARY KEY(id,depid)
CONSTRAINT UU UNIQUE(name)
)
基本查询语句:MySql提供select语句进行数据库查询,该语句使用当时灵活,功能丰富,语法如下
SELECT 属性列表 FROM 表名或视图名 [WHERE 表达条件式] [GROUP BY 属性名 [HAVING 条件表达式]] [ORDER BY 属性名[ASCIDESC]]
select 语句的含义是根据where子句的条件表达式,从from子句指定的基本表或试图中查找满足条件的记录,如果有group by子句,则将结果按照group by子句后的属性进行分组,该属性值相等的记录分为一组,一般会在每组上使用举个函数进行统计,如果在group by子句后带having断句,则只有满足having后面表达式的组才予输出。如果有order by子句,则会根据order by子句后面的属性进行圣墟或降序排列
查询表中部分字段
select id, name, age from student
查询表中全部字段
select id, name, age, adress from student
select * from student
查询经过计算的值(也就是我们可以在select子句中进行运算)
- 查询
select name, year(now())-age from student
#查询结果中的year(now())为函数嵌套,now()函数获取系统如期,year可以获取参数的年份,year(now())的结果为系统日期的年份,year(now())-age得到的是学生的出生年份
#为查找结果设置别名
select name, year(now())-age as bir
from student
#直接在查询结果中写表达式
select stu_id,now() from student
查询表中的若干记录
select distinct[要去重的字段] from 查询表
查询表中满足条件的记录
操作符 | 描述 |
---|---|
= | 等号,检测两个值是否相等,如果相等返回TRUE |
<>,!= | 不等于,检测两个值是否相等,如果不相等返回True |
> | 大于号,检测左边的值是否大于右边的值 |
< | 小于号,检测左边的值是否小于右边的值 |
>= | 大于等于号,检测左边的值是否大于等于右边的值 |
<= | 小于等于号,检测左边的值是否小于等于右边的值 |
确定范围(between···and | not between ··· and)
带in关键字的查询
select * from student where age in (12,20,23)
# 相反,可以用not in 来查询不属于指定集合的记录
[not] like '<匹配串>'
select * from student where name is null
#查询数据库中年龄18岁并且分数在80以上的学生
select * from student where age > 18 and garde >80
#查询计算机系或者经贸系的学生
select * from student where sdept = '计算机系' or sdept = '经贸系'
order by排序
#对查询出的结果根据age进行排序
select id, name, age from student
order by age desc
统计函数:
在实际项目中,需要通过表中的基本数据进行统计,比如求某列值的和,某列值得平均值等。mysql提供统计函数进行统计
函数 | 说明 |
---|---|
AVG(列名) | 返回某列的平均值 |
COUNT(*) | 返回记录的行数 |
COUNT(列名) | 返回一列中指的个数 |
MAX(列名) | 返回某列最大的值 |
MIN(列名) | 返回某列最小的值 |
SUM(列名) | 返回某个列之和 |
GROUP BY
#统计不同系别的学生
select sdept,count(*) as count _sdept
from student
group by sdept
# 将查询结果根据sdept的值进行分组
select ssex,sage count(*)
from student
group by ssex,sage
# 此查询根据性别分为两组,然后在女生中根据年龄再次分组,男生也根据年龄再次分组
HAVING子句
select sno,avg(grade)
from sc
group by sno
having avg(grade)>80
#根据sno将学生的选秀课程的成绩信息进行分组,然后统计每组的平均成绩,最后筛选出成绩大于80的分组信息
select s.no,sname,cno,grade
from student s inner join sc
no s.sno = sc.sno
# 在参加连接的表中间加上inner join,连接条件使用on 关键字给出,连接条件是相同的