int unsigned //正整数
数据类型,数值长度:
案例一
按照表格创建员工表(Emp)
MariaDB [(none)]> create database bw default character set utf8 collate utf8_bin;
MariaDB [(none)]> create table bw.emp(EmployeelID int(10) comment "员工编号",Name varchar(10) comment "姓名",Education varchar(4) comment "学历",Birthday date comment "出生日期",Gender char(2) comment "性别",Address varchar(40) comment "地址");
MariaDB [(none)]> desc bw.emp;
+-------------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------------+-------------+------+-----+---------+-------+
| EmployeelID | int(10) | YES | | NULL | |
| Name | varchar(10) | YES | | NULL | |
| Education | varchar(4) | YES | | NULL | |
| Birthday | date | YES | | NULL | |
| Gender | char(2) | YES | | NULL | |
| Address | varchar(40) | YES | | NULL | |
+-------------+-------------+------+-----+---------+-------+
6 rows in set (0.01 sec)
修改表名为Employees
MariaDB [bw]> show tables;
+--------------+
| Tables_in_bw |
+--------------+
| emp |
+--------------+
1 row in set (0.00 sec)
MariaDB [bw]> alter table emp rename Employees;
Query OK, 0 rows affected (0.01 sec)
MariaDB [bw]> show tables;
+--------------+
| Tables_in_bw |
+--------------+
| Employees |
+--------------+
1 row in set (0.00 sec)
删除Employees表中Address字段
MariaDB [bw]> alter table Employees drop Address;
Query OK, 0 rows affected (0.01 sec)
Records: 0 Duplicates: 0 Warnings: 0
MariaDB [bw]> desc Employees;
+-------------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------------+-------------+------+-----+---------+-------+
| EmployeelID | int(10) | YES | | NULL | |
| Name | varchar(10) | YES | | NULL | |
| Education | varchar(4) | YES | | NULL | |
| Birthday | date | YES | | NULL | |
| Gender | char(2) | YES | | NULL | |
+-------------+-------------+------+-----+---------+-------+
5 rows in set (0.00 sec)
修改表的存储引擎为MyISAM
MariaDB [bw]> alter table Employees engine=myisam;
Query OK, 0 rows affected (0.02 sec)
Records: 0 Duplicates: 0 Warnings: 0
修改Employees表中Gender字段名称,改为Sex
MariaDB [bw]> alter table Employees change Gender sex char(2) comment "性别";
Query OK, 0 rows affected (0.01 sec)
Records: 0 Duplicates: 0 Warnings: 0
MariaDB [bw]> desc Employees;
+-------------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------------+-------------+------+-----+---------+-------+
| EmployeelID | int(10) | YES | | NULL | |
| Name | varchar(10) | YES | | NULL | |
| Education | varchar(4) | YES | | NULL | |
| Birthday | date | YES | | NULL | |
| sex | char(2) | YES | | NULL | |
+-------------+-------------+------+-----+---------+-------+
5 rows in set (0.01 sec)
增加电话号码字段:phonenumber,varchar类型,长度为15
MariaDB [bw]> alter table Employees add phonenumber varchar(15);
Query OK, 0 rows affected (0.00 sec)
Records: 0 Duplicates: 0 Warnings: 0
MariaDB [bw]> desc Employees;
+-------------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------------+-------------+------+-----+---------+-------+
| EmployeelID | int(10) | YES | | NULL | |
| Name | varchar(10) | YES | | NULL | |
| Education | varchar(4) | YES | | NULL | |
| Birthday | date | YES | | NULL | |
| sex | char(2) | YES | | NULL | |
| phonenumber | varchar(15) | YES | | NULL | |
+-------------+-------------+------+-----+---------+-------+
6 rows in set (0.00 sec)
案例二
部门表:
员工表:
创建部门表,同时添加约束(见表)
MariaDB [bw]> create table dept(DeptID int(10) primary key comment "部门编号",deptName varchar(10) comment "部门名");
Query OK, 0 rows affected (0.00 sec)
MariaDB [bw]> desc dept;
+----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| DeptID | int(10) | NO | PRI | NULL | |
| deptName | varchar(10) | YES | | NULL | |
+----------+-------------+------+-----+---------+-------+
2 rows in set (0.00 sec)
为前面案例中的员工表添加约束(见表)
MariaDB [bw]> create table emp(employeeID int(10) primary key comment "员工编号",name varchar(10) comment "姓名",education varchar(4) comment "学历",birthday date comment "出生日期",sex char(2) comment "性别",phonenumber varchar(15) unique comment "电话好吗",DeptID int(10) comment "部门编号" references dept(DeptID));
Query OK, 0 rows affected (0.02 sec)
MariaDB [bw]> desc emp;
+-------------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------------+-------------+------+-----+---------+-------+
| employeeID | int(10) | NO | PRI | NULL | |
| name | varchar(10) | YES | | NULL | |
| education | varchar(4) | YES | | NULL | |
| birthday | date | YES | | NULL | |
| sex | char(2) | YES | | NULL | |
| phonenumber | varchar(15) | YES | UNI | NULL | |
| DeptID | int(10) | YES | | NULL | |
+-------------+-------------+------+-----+---------+-------+
7 rows in set (0.00 sec)
为phonenumber的唯一约束命名为pn_1
MariaDB [wg]> alter table emp add constraint pn_1 unique(phonenumber);
Query OK, 0 rows affected (0.03 sec)
Records: 0 Duplicates: 0 Warnings: 0
先添加外键字段,再增加外键约束
MariaDB [bw]> ALTER TABLE emp ADD CONSTRAINT fk_DeptID FOREIGN KEY (DeptID) REFERENCES dept(DeptID);
Query OK, 0 rows affected (0.02 sec)
Records: 0 Duplicates: 0 Warnings: 0
删除唯一约束pn_1
MariaDB [bw]> alter table emp drop index pn_1;
Query OK, 0 rows affected (0.01 sec)
Records: 0 Duplicates: 0 Warnings: 0
案例三
创建表,表结构和数据如下:
向新闻评论表中插入一行数据
插入多行数据
MariaDB [bw]> create table comments(cmtId int,newsId int,cmtContent varchar(255),cmtDte DATETIME,cmtIP varchar(12),cmtAuthor varchar(10));
Query OK, 0 rows affected (0.01 sec)
MariaDB [bw]> insert into comments values(1,1,"有深度","2019-01-01 00:00:00","192.168.1.2","张三1"),(2,1,"有深度","2018-12-03 00:00:00","192.168.1.2","张三2"),(3,1,"有深度","2018-12-03 00:00:00","192.168.1.2","张三3");
Query OK, 3 rows affected (0.00 sec)
Records: 3 Duplicates: 0 Warnings: 0
通过INSERT INTO SELECT语句将现有表中的数据添加到已存在的表中
注意:
newComments表必须预先创建,并具有cmtContent,cmtDate和cmtAuthor三列
MariaDB [bw]> create table newComments(cmtId int,newsId int,cmtContent varchar(255),cmtDte DATETIME,cmtIP varchar(12),cmtAuthor varchar(10));
Query OK, 0 rows affected (0.00 sec)
MariaDB [bw]> insert into newComments(cmtContent,cmtDte,cmtAuthor) select cmtContent,cmtDte,cmtAuthor from comments;
Query OK, 3 rows affected (0.00 sec)
Records: 3 Duplicates: 0 Warnings: 0
通过CREATE TABLE SELECT语句将现有表中的数据添加到未存在的表中
MariaDB [bw]> create table newComments_v1 select * from comments;
Query OK, 3 rows affected (0.01 sec)
Records: 3 Duplicates: 0 Warnings: 0
把cmtId号为一的评论内容改成“喜欢邓超”,评论日期改成“2019-01-01”。
MariaDB [bw]> update comments set cmtContent="喜欢邓超",cmtDte="2019-01-01" where cmtId=1;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
注意:
1、更新多列数据使用逗号隔开
2、勿忘条件限制,以防有效数据的丢失
删除:
DELETE FROM 表名 [WHERE条件];
注意:
有主外键关联表,先删外键表数据,再删除主键表数据
TRUNCATE TABLE 表名;
注意:
表结构及其字段、约束、索引保持不变
DELETE语句和TRUNCATE TABLE语句对比
案例四
请在bw_edu数据库中创建:wg_dep表,字段要求如下
字段名 | 字段类型 | 主键 | 非空 | 自增 | 默认值 |
---|---|---|---|---|---|
学号 | int(5) | 是 | 是 | 是 | 否 |
班级 | varchar(5) | 否 | 是 | 否 | 否 |
姓名 | varchar(10) | 否 | 是 | 否 | 否 |
性别 | char(2) | 否 | 是 | 否 | 否 |
年龄 | int(3) | 否 | 是 | 否 | 否 |
阶段 | varchar(10) | 否 | 是 | 否 | 否 |
成功请插入如下数据
请查询wg_dep表中专业阶段所有学生的信息
请统计wg_dep表中专业和专高阶段的人数
请查询wg_dep表中姓马的学生的信息
请查询wg_dep表中章子怡的学号
查询
DQL常用查询语句:
基本查询、条件查询、多条件查询、模糊查询、分组查询、连接查询、子查询
DQL包含的应用:
AS关键字、运算符、IN关键字、BETWEEN AND关键字、DISTINCT关键字、ORDER BY关键字、LIMIT关键字、NULL关键字、HAVING关键字、聚合函数
通配符:
获取新闻评论表中评论编号为1的新闻评论信息呢?
怎样查询评论日期是’2019-01-01’的新闻信息?
如何查询评论名字是张三1并且评论日期是‘2019-01-01’的信息呢?
怎样获取评论者名称中包含’东’字的数据记录
如何查询‘张’某的新闻评论信息?
每条新闻被评论的次数各是多少?
SELECT newsId 新闻编号,COUNT(*) AS 数量 FROM comments GROUP BY newsId
查询每条新闻被评论的次数并且按照降序排列
SELECT newsId 新闻编号,COUNT(*) AS 数量 FROM comments GROUP BY newsId ORDER BY COUNT(*) DESC;
每条新闻被评论的次数小于5次的信息?
SELECT newsId 新闻编号,COUNT(*) AS 数量 FROM comments GROUP BY newsId HAVING COUNT(*)<5;
去重
去掉SELECT查询返回的记录结果中重复的记录, 相同记录只返回一条
SELECT DISTINCT 字段名1, 字段名2... FROM 表名
SELECT DISTINCT cmtContent FROM comments
排序
一组数据按照升序或降序排列
MySQL查询语句中使用LIMIT子句限制结果集
查询从第三行开始接下来五条数据,怎么使用语法进行查询呢?
SELECT * FROM comments LIMIT 2,5
注意:
NULL特点
区别空字符串’’
只能出现在定义允许为NULL的字段
须使用 IS NULL 或 IS NOT NULL 比较操作符去比较
新闻评论表中cmtAuthor数据被删除后,使用IS NULL能查出来吗?
SELECT * FROM comments WHERE cmtAuthor = ‘ ’;
聚合函数是可以对一组值进行计算,并返回单个值的函数
SELECT 聚合函数 FROM <表名>
SELECT COUNT(*) AS 总数 FROM comments;
SELECT MAX(cmtDate) AS 最近评论时间 FROM comments;
问题:
每条新闻被评论的次数各是多少?
定义:分组查询是按照指定的字段分类汇总结果的查询方式
注意:
SELECT列表中只能包含:
1、被分组的列
2、为每个分组返回一个值的表达式,如聚合函数
问题:
查询每条新闻被评论的次数并且按照降序排列
每条新闻被评论的次数小于5次的信息?
高级查询
使用连接查询和子查询完成信息的查询功能
定义:连接查询是将多张表中记录按照指定的条件进行连接的查询方式
定义:内连接是返回连接表中符合连接条件记录的连接查询
定义:外连接是以一张表为基表,返回基表中所有记录及连接表中符合条件的记录的连接查询
定义:左外连接是以左表为基表,返回左表中所有记录及连接表中符合条件的记录的外连接
定义:右外连接是以右表为基表,返回右表中所有记录及连接表中符合条件的记录的外连接
新闻表
新闻栏目表
如何查询评论编号、评论内容以及新闻名称呢?
如何使用内连接查询新闻名称以及栏目名称呢?
注意:
内连接的两张表是没有主次之分的
问题;
如何查询评论编号、评论内容、新闻名称以及栏目名称呢?
如何使用左外连接查询新闻名称以及栏目名称呢?
如何使用右外连接查询新闻名称以及栏目名称呢?
子查询
定义:子查询是嵌套在其他SQL语句中的查询语句
注意:
先执行子查询,返回所有来自子查询的结果,再执行外围的父查询,
返回查询的最终结果
问题:
如何查询比‘张东’评论日期晚的新闻评论者信息?
如何查询不是评论者名称中包含‘东’字的新闻名称?
如果新闻评论者名称中包含‘张_’就查询新闻表的全部信息?
如果新闻评论者名称中包含‘张_峰’就查询新闻表的全部信息?
如果新闻评论者名称中不包含‘张_峰’就查询新闻表的全部信息?