SQL:Structure Query Language(结构化查询语言),SQL被美国国家标准局(ANSI)确定为关 系型数据库语言的美国标准,后来被国际化标准组织(ISO)采纳为关系数据库语言的国际标准。
各数据库厂商都支持ISO的SQL标准,普通话
各数据库厂商在标准的基础上做了自己的扩展,方言
SQL 是一种标准化的语言,它允许你在数据库上执行操作,如创建项目,查询内容,更新内容, 并删除条目等操作。
Create, Read, Update, and Delete 通常称为CRUD操作(CRUD在以后的开发中占比重还是不小的哦)
mysql注意:
- 语法中,不区分大小写
- 语句结尾都已英文状态分号 “ ; ” 结尾,回车运行
- 所有符号都为英文状态下
- #单行注释
- -- 单行注释 (--后面有一个空格)
- /* */ 多行注释
CREATE DATABASE 数据库名;
CREATE DATABSE 数据库名 CHARACTER SET 编码方式;
常见的编码方式:gb2312,utf-8,gbk,iso-8859-1
CREATE DATABASE 数据库名 CHARACTER SET 编码方式 COLLATE 排序规则;
//查看当前数据库服务器中的所有数据库
SHOW DATABASES;
//查看前面创建的myddl数据库的定义信息
show create database myddl;
alter database 数据库名 character set 编码方式
//alter database 数据库名 character set 编码方式
alter database myddl character set utf8;
drop database 数据库名;
//drop database 数据库名;
drop database myddl;
select database();
Select database();
6、切换数据库(使用数据库)
use 数据库名;
use myddl;
语法
CREATE TABLE 表名(
列名1 数据类型 [约束],
列名2 数据类型 [约束],
列名n 数据类型 [约束]
);
常用数据类型:
- int:整型
- double:浮点型,例如double(5,2)表示最多5位,其中必须有2位小数,即最大值为 999.99;默认支持四舍五入
- char:固定长度字符串类型; char(10) 'aaa ' 占10位
- varchar:可变长度字符串类型; varchar(10) 'aaa' 占3位
- text:字符串类型,比如小说信息;
- blob:字节类型,保存文件信息(视频,音频,图片);
- date:日期类型,格式为:yyyy-MM-dd;
- time:时间类型,格式为:hh:mm:ss
- timestamp:时间戳类型 yyyy-MM-dd hh:mm:ss 会自动赋值
- datetime:日期时间类型 yyyy-MM-dd hh:mm:ss
注意:
多列之间使用逗号隔开,最后一列不用(列指的是与列名所有相关的类型属性,约束等称为一列),约束可有可无,不管是列名还是表明都不区分大小写。
栗子:
create table student(
name varchar(10),
age int,
id varchar(20)
);
Query OK, 0 rows affected (0.06 sec)
show tables;
//查看所有表
show tables;
//运行结果
+---------------+
| Tables_in_lyj |
+---------------+
| student |
+---------------+
1 row in set (0.00 sec)
desc 表名;
//desc 表名;
desc student;
//运行结果
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| name | varchar(10) | YES | | NULL | |
| age | int | YES | | NULL | |
| id | varchar(20) | YES | | NULL | |
+-------+-------------+------+-----+---------+-------+
3 rows in set (0.01 sec)
alter table 表名 add 新列名 新的数据类型;
//在student表里增加一个性别列
alter table student add sex char(2);
//运行结果
Query OK, 0 rows affected (0.05 sec)
Records: 0 Duplicates: 0 Warnings: 0
//查看修改后的表
desc student;
//运行结果
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| name | varchar(10) | YES | | NULL | |
| age | int | YES | | NULL | |
| id | varchar(20) | YES | | NULL | |
| sex | char(2) | YES | | NULL | |
+-------+-------------+------+-----+---------+-------+
4 rows in set (0.00 sec)
alter table 表名 change 旧列名 新列名 新的数据类型;
//将student表中的id列,名字改为 number
alter table student change id number varchar(20);
//运行结果
Query OK, 0 rows affected (0.01 sec)
Records: 0 Duplicates: 0 Warnings: 0
//查看修改后的表
desc student;
//运行结果
+--------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| name | varchar(10) | YES | | NULL | |
| age | int | YES | | NULL | |
| number | varchar(20) | YES | | NULL | |
| sex | char(2) | YES | | NULL | |
+--------+-------------+------+-----+---------+-------+
4 rows in set (0.00 sec)
alter table 表名 drop 列名;
# 删除number列
alter table student drop number;
# 运行结果
Query OK, 0 rows affected (0.05 sec)
Records: 0 Duplicates: 0 Warnings: 0
desc student;
# 运行结果
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| name | varchar(10) | YES | | NULL | |
| age | int | YES | | NULL | |
| sex | char(2) | YES | | NULL | |
+-------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)
alter table 旧表名 rename 新表名;
#将student表名修改为users
alter table student rename users;
#运行结果
Query OK, 0 rows affected (0.02 sec)
show tables;
#运行结果
+---------------+
| Tables_in_lyj |
+---------------+
| users |
+---------------+
1 row in set (0.00 sec)
show create table 表名;
#显示users表创建细节
show create table users;
# 运行结果
+-------+-------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table |
+-------+-------------------------------------------------------------------------------------------------------------------------------------------------------+
| users | CREATE TABLE `users` (
`name` varchar(10) DEFAULT NULL,
`age` int DEFAULT NULL,
`sex` char(2) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
+-------+-------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.01 sec)
alter table 表名 character set 编码方式;
#修改表的字符集为gbk
alter table users character set gbk;
#运行结果
Query OK, 0 rows affected (0.01 sec)
Records: 0 Duplicates: 0 Warnings: 0
drop table 表名;
drop table users;
# 运行结果
Query OK, 0 rows affected (0.02 sec)
#显示所有表
show tables;
#运行结果
Empty set (0.00 sec)
表名 card(会员卡表)
列名 数据类型
cardid int
cardnum varchar(20)
regDate date
需求: (1)创建该表 (2)将card表名修改为CardInfo (3)添加delDate(注销时间) 列到表中 (4)将cardnum改为varchar(30) (5)删除regDate列 (6)删除cardInfo表
create table card (
-> cardid int,
-> cardnum varchar(20),
-> regDate date
-> );
Query OK, 0 rows affected (0.03 sec)
mysql> #将card表名修改为CardInfo
mysql> alter table card rename CardInfo;
Query OK, 0 rows affected (0.03 sec)
mysql> show tables;
+---------------+
| Tables_in_lyj |
+---------------+
| cardinfo |
+---------------+
1 row in set (0.00 sec)
mysql> # 添加注销时间(delDate)列表中
mysql> alter table cardindo add delDate date;
ERROR 1146 (42S02): Table 'lyj.cardindo' doesn't exist
mysql>
mysql> alter table cardinfo add delDate date;
Query OK, 0 rows affected (0.02 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> #上面是报错是因为表名写错了,大家以后也要注意呀,咩哈哈哈
mysql> # 将cardnum 改为varchar(30)
mysql> alter table cardinfo change cardnum cardnum varchar(30);
Query OK, 0 rows affected (0.01 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc cardinfo;
+---------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+-------+
| cardid | int | YES | | NULL | |
| cardnum | varchar(30) | YES | | NULL | |
| regDate | date | YES | | NULL | |
| delDate | date | YES | | NULL | |
+---------+-------------+------+-----+---------+-------+
4 rows in set (0.00 sec)
mysql># 删除regDate列
mysql>
mysql> alter table cardinfo drop regdate;
Query OK, 0 rows affected (0.05 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> # 删除cardinfo表
mysql>
mysql> drop table cardinfo;
Query OK, 0 rows affected (0.02 sec)
mysql>
DML是对表中的数据进行增、删、改的操作。
主要包括:INSERT 、UPDATE、 DELETE
insert into 表名(列名1, 列名2, ……, 列名n)values (列值1, 列值2,……, 列值n);
insert into student(name,age, sex) values ('大锤',10, '女');
# 运行结果
Query OK, 1 row affected (0.01 sec)
注意:
1、多列和多个列值之间使用逗号隔开
2、列名要和列值一一对应
3、非数值的列值两侧需要加单引号
4、字符串类型和日期类型都要用单引号括起来。
特殊情况:
当给所有列添加数据的时候,可以将列名省略 ,此时列值的顺序按照数据表中列的顺序执行
insert into 表名 values(列值1, 列值2,……, 列值n)
insert into student values('锤锤',8,'男'); #运行结果 Query OK, 1 row affected (0.01 sec)
insert into 表名(列名1, 列名2, ……, 列名n)value (列值1, 列值2,……, 列值n),
(列值1, 列值2,……, 列值n),
(列值1, 列值2,……, 列值n);
insert into student(name,age, sex) values ('2锤',9, '男'),
('小锤', 2, '女');
#运行结果
Query OK, 2 rows affected (0.01 sec)
Records: 2 Duplicates: 0 Warnings: 0
注意:
1、列名与列值的类型、个数、顺序要一一对应。
2、参数值不要超出列定义的长度。
3、如果插入空值,请使用null
4、插入的日期和字符一样,都使用引号括起来。
UPDATE 表名 SET 列名1=列值1,列名2=列值2 ... WHERE 列名=值
在这个表中
将所有员工薪水修改为5000元。
将姓名为’lisi’的员工薪水修改为3000元。
将姓名为’aaa’的员工薪水修改为4000元,resume改为ccc。
将你好的薪水在原有基础上增加1000元。
-- 将所有员工薪水修改为5000元
update emp set salary = 5000;
-- 将姓名为’lisi’的员工薪水修改为3000元。
UPDATE emp SET salary = 3000 WHERE `name` = "lisi";
-- 将姓名为’aaa’的员工薪水修改为4000元,resume改为ccc。
UPDATE emp SET salary = 4000,resume = 'ccc' WHERE `name` = 'aaa';
-- 将你好的薪水在原有基础上增加1000元。
UPDATE emp SET salary = salary + 1000 WHERE `name` = '你好';
全部执行完后的表:
DELETE from 表名 【WHERE 列名=值】
中括号中的可以省略
首先有个表他之前长这样:
然后经过一顿代码操作之后:
-- 删除工资3000的人的数据
delete from emp where salary = 3000;
最后拉个表就长这样了:
注意:
删除表中所有数据,可以使用 TRUNCATE TABLE 表名;
也可以使用 delete from 表名;区别:
- DELETE 删除表中的数据,表结构还在;删除后的数据可以找回
- TRUNCATE 删除是把表直接DROP掉,然后再创建一个同样的新表。 -删除的数据不能找回。执行速度比DELETE快。
DML是对表中的数据进行查询的操作。
主要包括:SELECT
数据库执行DQL语句不会对数据进行改变,而是让数据库发送结果集给客户端。
查询返回的结果集是一张虚拟表。
语法:
SELECT 列名 FROM 表名 【WHERE --> BROUP BY-->HAVING--> ORDER BY】
多个列名之间用逗号隔开,最后一个列名不加
SELECT 列名1, 列名2, ……, 列名n FROM 表名 【WHERE --> BROUP BY-->HAVING--> ORDER BY】
列名用 * 表示,表示查询所有列
SELECT * FROM 表名 【WHERE --> BROUP BY-->HAVING--> ORDER BY】
SELECT 要查询的列名称
FROM 表名称
WHERE 限定条件 /*行条件*/
GROUP BY grouping_columns /*对结果分组*/
HAVING condition /*分组后的行条件*/
ORDER BY sorting_columns /*对结果分组*/|
LIMIT offset_start, row_count /*结果限定*/
1.1 create user 用户名@指定ip identified by '密码';
create user yun@localhost IDENTIFIED by 'test123';
创建成功后可以进行测试 mysql -u 用户名 -p 密码 , 能够进入,表示创建成功
1.2、 create user 用户名@客户端ip identified by '密码'; 指定IP才能登陆
1.3、 create user 用户名@‘% ’ identified by '密码'; 任意IP均可登陆
-- 授予用户 yun 对数据库 myddl 增删改查创建的权限
GRANT SELECT,INSERT,UPDATE,DELETE,CREATE ON myddl.* TO yun@localhost;
-- 授予yun用户所有数据库的所有权限
GRANT ALL ON *.* TO yun@localhost;
show grants for 用户名@IP;
-- 查询yun用户的权限
SHOW GRANTS FOR yun@localhost;
revoke 权限1,权限2,........,权限n on 数据库名.* from 用户名@IP;
-- 撤销yun 用户对所有数据库的增删改权限
REVOKE INSERT,DELETE,UPDATE ON *.* FROM yun@localhost;
drop user 用户名@IP;
-- 删除yun用户
DROP USER yun@localhost;