您的位置:首页 > 数据库 > MySQL

MySQL之DDL,DQL,DML,DCL

2016-04-09 12:02 609 查看
5.DDL 数据定义语言

操作:

*查看所有数据库的名称:

SHOW DATABASES;

*切换数据库:(切换到student数据库)

USE student; 

*创建数据库

CREATE DATABASE 数据库名称;

如果这个数据库已经存在则会报错,那么我们这样做:

CREATE DATABASE IF NOT EXISTS 数据库名称;

那么就会在此数据库不存在时创建,存在了也不会报错。

*删除数据库

DROP DATABASE 数据库名称;

如果该数据库不存在则此时会报错,那么该这样做

DROP DATABASE IF EXISTS 数据库名称;

这样就只会在数据库存在的时候删除,不存在也不会报错。

*修改数据库的编码

数据库的编码应在安装时就已经设置好了。

ALTER DATABASE 数据库的名称 CHARACTER SET utf8;

注:是utf8而不是utf-8

*操作表

列如:

CREATE TABLE student(
sid CHAR(6),
sname VARCHAR(20),
age INT,
gender VARCHAR(10)

);

列如:

CREATE TABLE emp(
eid CHAR(6),
ename VARCHAR(50),
age INT,
gender VARCHAR(6),
birthday DATE,
hiredata DATE,
salary DECIMAL(7,2),
resume VARCHAR(1000)

);

*查看当前数据库所有表的名称

SHOW TABLES;

*查看表的结构

DESC emp;

*删除表

DROP TABLE emp;

*修改表:

添加一列

ALTER TABLE 表名 ADD(列名 列值);

修改列的类型 

ALTER TABLE 表名 MODIFY 列名 列值;

修改列名

ALTER TABLE 表名  CHANGE 列名 新列名 新列值;

删除列

ALTER TABLE 表名 DROP 列名;

修改表的名称
ALTER TABLE 表名 RENAME TO 新表名

6.数据类型

*int 整型

*double 浮点型 double(5,2)表示最多5位,其中必须有两位小数,即最大值为999.99;

*decimal 泛型型,在表单钱的方面使用该类型,不会出现精度确实问题。

*char 固定长度字符串类型

*varchar 可变长度字符串类型

*text 字符串类型

*blob 字节类型

*data 日期类型,格式为yyyy-MM-dd

*time 时间类型 格式为hh:mm:ss

*timestamp:时间戳类型 格式yyyy-MM-dd hh:mm:ss

7.DML 数据操作语言

*插入数据

INSERT INTO 表名(列名1,列名2,...)values(值1,值2,...);

列如:INSERT INTO student (
sid,sanme,age,dender

)values(
's_0001','zhangsan',23,'male'

);

注:用的是单引号,并不是双引号。

*修改数据

UPDATE 表名 SET 列名1=值1,...列名n=值n WHERE 条件;

列如:

UPDATA student SET sname='lisi',age='32',dender='female' WHERE sid='s_0001';

UPDATA student SET sname='lisi',age='32',dender='female' WHERE age >50 AND gender='male';

UPDATA student SET sname='lisi',age='32',dender='female' WHERE age > 60 OR gender = 'female';

UPDATA student SET 

age=age+1 WHERE sid='s_0001';

*删除数据

DELETE FROM 表名 WHERE 条件;

列如:

DELETE FROM student WHERE sanme='zhangsan';

DELETE FROM 表名;这样无条件是将整张表的内容都删掉

TRUNCATE TABLE 表名;也是将整张表的内容删除 但是效率比DELETE 要高。TRUNCATE是将整张表删掉后在创建一张新表,属性为DDL,无法回滚,但是DELETE删除的记录是可以回滚的。

8.DCL 数据控制语言

以下操作都是在root下进行的

*创建用户

CREATE USER 用户名 @地址 IDENTIFIED BY '密码';

列如:CREATE USER user1 @localhost IDENTIFIED BY '123';

*给用户授权

GRANT 权限1,...权限n ON 数据库.* TO 用户名;

GRANT ALL ON 数据库名.* TO USER2@localhost;

*撤销授权

REVOKE 权限1,...,权限n ON 数据库.* FROM 用户名;

REVOKE CREATE ON 数据库名.* FROM user1@localhost;

*查看用户权限

SHOW GRABTS FOR 用户名;

*删除用户名

DROP USER 用户名;

*修改用户名密码

USE 数据库名;

UPDATE USER SET PASS WORD=PASSWORD('密码')

WHERE User='用户名' and Host='IP';

FLUSH PRIVILEGES;

9.DQL 数据查询语言(最重点)

不会对数据做出改变,只是把结果输送到客户端

*基本查询:

SELECT * FROM 表名;

SELECT 列名1,...列名n FROM 表名;

*条件查询:

WHERE子句可以使用以下运算符及关键字:

=,  !=,  <>,  <,  >,  <=,  >=;

BETWEEN ... AND;

IN(set);

IS NULL;

AND;

OR;

NOT;

查询性别为女,并且年龄为50 的人信息

SELECT * FROM 表名 WHERE gender='female' AND age='50';

查询学号为s_1001,或者姓名为lisi的记录

SELECT * FROM 表名 WHERE sid='s_1001' OR sname='lisi';

查询学号为s_1001,s_1002,s_1003的记录

SELECT * FROM 表名 WHERE sid IN('S_1001','S_1002','S_1003');

查询年龄为null的记录

SELECT * FROM 表名 WHERE age IS NULL;

查询年龄在20到40之间的学生记录

SELECT * FROM 表名

WHERE age>=20 AND age<=40;

或者

SELECT * FROM 表名 

WHERE age BETWEEN 20 AND 40;

查询性别非男的学生记录

SELECT * FROM 表名

WHERE gender!='male';

或者

SELECT * FROM 表名

WHERE gender<>'male';

或者

SELECT * FROM 表名

WHERE NOT gender='male';

查询姓名不为null的学生记录

SELECT * FROM 表名

WHERE NOT sname IS NULL;

或者

SELECT * FROM 表名

WHERE sname IS NOT NULL;

*模糊查询 关键字LIKE

查询姓名由5个字母构成的学生记录

SELECT * FROM 表名 WHERE sanme LIKE '_____';

查询姓名由5个字母构成,并且第5个字母为“i”的学生记录

SELECT * 

FROM 表名

WHERE sname LIKE '____i';

查询姓名以“z”开头的学生记录

SELECT * 

FROM 表名

WHERE sname LIKE 'z%';

其中"%"匹配0~n个任何字母。

查询姓名中第2个字母为“i”的学生记录

SELECT * 

FROM 表名

WHERE sname LIKE '_i%';

查询姓名中包含"a"字母的学生记录

SELECT * 

FROM 表名

WHERE sname LIKE '%a%';

*字段控制查询

去除重复的记录

SELECT DISTINCT 列名

FROM 表名;

查看雇员的月薪与佣金之和

SELECT *,sal+comm FROM 表名;

其中sal与comm都为int型,如果comm的值为null则任何东西与NULL相加结果还是NULL,

要进行下面操作:

SELECT *,sal+IFNULL(comm,0) FROM emp;

comm中的null会被当做0来对待

给列名添加别名

SELECT *, sal+IFNULL(comm,0) AS total 

FROM 表名;

AS的关键字是可以省略的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: