记不住sql语句就来翻翻这篇博客
SQL分别是由以下四种语言组成:
DML(数据操作语言) 用来操作数据库中所包含的数据 INSERTUPDATEDELETE
DDL(数据定义语言) 用于创建和删除数据库对象等操作 CREATEDROPALTER
DQL(数据查询语言) 用来对数据库中的数据进行查询 SELECT
DCL(数据控制语言) 用来控制数据库组件的存取许可、存取权限等 GRANTCOMMITROLLBACK
项目开发步骤 和 设计数据库的步骤
①软件开发步骤:
需求分析
概要设计
详细设计
代码编写
软件测试
安装部署
②设计数据库步骤
收集信息
标识实体
标识属性
标识关系
关于数据库的
1、创建数据库
create database 数据库名;
2、使用数据库
use 数据库名;
3、查看数据库
show databases;
4、删除数据库
drop database 数据库名;
关于表
1、创建表
语法:
CREATE TABLE [IF NOT EXISTS] 表名 (
字段1 数据类型 [字段属性|约束][索引][注释],
……
字段n 数据类型 [字段属性|约束][索引][注释]
)[表类型][表字符集][注释];
注意:多字段使用逗号分隔
保留字用撇号括起来
单行注释:#…
多行注释:/……/
2、查看表数据
3、查看表定义
desc 表名;
use asst;
4、创建学生表
CREATE table student(
studentNo int(4) not null COMMIT '学号' PRIMARY KEY,
loginpwd VARCHAR(20) not null commit '密码',
studentName VARCHAR(50) not null COMMIT '学生姓名',
sex char(2) defult '男' not null commit '性别',
gradeID int(4) unsigned commit '年纪编号',
phone VARCHAR(50) commit '联系电话',
address VARCHAR(255) defult '地址不详' commit '地址',
bornDate datetime commit '出生日期',
email VARCHAR(50) COMMIT '邮件账号',
idcard var(18) UNIQUE KEY COMMIT '身份证号'
)COMMIT '学生表'
概要阶段
绘制E-R图
绘制数据库模型图
关系类型 : 一对一 、一对多、 多对一 、多对多
详细阶段 运三大范式
第一大范式:保证每一列都是原子性(保证每列不可再分)
第二大范式:保证每一列都和主键相关(保证每个表只做一件事情)
第三大范式:保证每列都和主键直接相关(保证每列不可再分出另外一张表)
修改表
1、修改表名
ALTER TABLE 旧表名 RENAME [TO] 新表名;
2、添加字段
ALTER TABLE 表名 ADD 字段名 数据类型 [属性];
3、修改字段
ALTER TABLE 表名 CHANGE 原字段名 新字段名 数据类型 [属性];
4、删除字段
ALTER TABLE 表名 DROP 字段名;
添加主键
ALTER TABLE 表名 ADD CONSTRAINT 主键名
PRIMARY KEY 表名(主键字段);
添加外键
ALTER TABLE 表名 ADD CONSTRAINT 外键名 FOREIGN KEY(外键字段)
REFERENCES 关联表名(关联字段);
DML语句
1、插入单条数据记录
INSERT INTO 表名 [(字段名列表)] VALUES (值列表);
2、插入多条数据记录
INSERT INTO 新表(字段名列表)
VALUES(值列表1),(值列表2),……,(值列表n);
3、将查询结果插入新表
①INSERT INTO 新表(字段1,字段2……)
SELECT字段1,字段2……
FROM 原表;
②CREATE TABLE 新表(SELECT 字段1,字段2
……
FROM 原表);
4、更新
UPDATE 表名
SET 字段1=值1,字段2=值2,…,字段n=值n
[WHERE 条件];
5、删除
① DELETE FROM 表名 [WHERE条件];
② TRUNCATE TABLE 表名;
DQL语句
SELECT <字段名列表>
FROM <表名或视图>
[WHERE <查询条件>]
[GROUP BY <分组的字段名>]
[ORDER BY <排序的列名> [ASC 或 DESC]]
[LIMIT [位置偏移量, ]行数];
使用LIMIT子句时,注意第1条记录的位置是0!
子查询
在WHERE语句中的一般用法
将子查询和比较运算符联合使用,必须保证子查询返回的值不能多于一个
EXISTS子查询
SELECT …… FROM 表名 WHERE EXISTS(子查询);
子查询有返回结果: EXISTS子查询结果为TRUE
子查询无返回结果: EXISTS子查询结果为FALSE
IN/NOT IN:子查询可返回多条记录
事务(TRANSACTION)
是作为单个逻辑工作单元执行的一系列操作
多个操作作为一个整体向系统提交,要么都执行、要么都不执行
事务是一个不可分割的工作逻辑单元
特性:
1、原子性(Atomicity)
事务是一个完整的操作,事务的各步操作是不可分的(原子的),要么都执行,要么都不执行
2、一致性(Consistency)
当事务完成时,数据必须处于一致状态
3、隔离性(Isolation)
并发事务之间彼此隔离、独立,它不应以任何方式依赖于或影响其他事务
4、持久性(Durability)
事务完成后,它对数据库的修改被永久保持
5、创建事务
开始事务
BEGIN ;
或
START TRANSACTION;
提交事务
COMMIT ;
回滚(撤销)事务
ROLLBACK ;
视图
创建视图
CREATE VIEW view_name
AS
<SELECT 语句>;
删除视图
DROP VIEW [IF EXISTS] view_name;
查看视图
SELECT 字段1, 字段2, …… FROM view_name;
索引
创建索引
CREATE [UNIQUE|FULLTEXT|SPATIAL] INDEX index_name
ON table_name (column_name[length]…);
删除索引
DROP INDEX index_name ON table_name;
删除表时,该表的所有索引同时会被删除
查看索引
SHOW INDEX FROM table_name;
数据库两表链接的三种方式
-- 两表联查 where
select * from student s,grade g
where s.gradeid=g.gradeid;
-- 子查询方式两表联查
SELECT * from student where gradeID in(
select gradeid from grade)
-- inner join 内连接
select * from student s INNER JOIN grade g
on s.gradeid=g.gradeid
最后,一定要对sql语句进行优化!!!
1、查询时减少使用*返回全部列
2、尽量不要在数据很多的列中建立索引
3、经常用来做条件的列 可以建立索引
4、避免在order by中写表达式