1.数据库结构: 以mysql为例,mysql服务器里面可以有多个数据库,一个数据库里面可以有多张表; 一般而言,一个系统(软件,项目)就设计一个数据库,一个数据库里面设计多张表,每一张表对应一个实体类; 2.什么是SQL? Structure Query Language(结构化查询语言),通过SQL语句可以操作数据库。 SQL在windows中不区分大小写; 3.操作数据库: -- 创建数据库 create database 数据库名 [character set 字符集][collate 校对规则] create database mywork CHARACTER set utf8; -- 查看数据库 SHOW DATABASES; SHOW CREATE DATABASE mywork; -- 删除数据库 drop database 数据库名; DROP DATABASE mywork; -- 修改数据库 alter database 数据库名 character set 字符集; ALTER DATABASE mywork CHARACTER set utf8; -- 选中数据库 use 数据库名; use mywork; -- 查看正在使用的数据库 select database(); select database(); 4.操作数据表: 说明:可变长度 varchar(n) eg:varchar(20), 最大能存放20个字符. ‘aaa’, 占3个字符的空间 日期 - DATE 只有日期(年月日) - DATETIME 日期和时间(年月日时分秒) - TimeStamp 时间戳 约束: not null: 非空 ; eg: username varchar(40) not null username这个列不能有null值 unique:唯一约束, 后面的数据不能和前面重复; eg: cardNo char(18) unique; cardNo 列里面不可以有重复数据 primary key;主键约束(非空+唯一); 一般用在表的id列上面. 注意: 1. 先设置了primary key 才能设置auto_increment 2. 只有当设置了auto_increment 才可以插入null 数据库自动增加值维护id 1.创建数据表: create table student( id int primary key auto_increment, name varchar(40), sex varchar(8), age int ); 2.查看表: 1.查看当前数据库中的所有表: show tables; 2.查看某张数据表的结构:例如:查看表 student desc student; 3.修改表 1.在表中增加一列:例如:在表student增加列名address alter table student add address varchar(40) not null; 2.修改列的类型约束: alter table student modify sex varchar(10); 3.修改列的名称,类型,约束:修改表student中列名address为s_address,类型为varchar(20) alter table student change address s_address varchar(20); 4.删除列: alter table student drop s_address; 5.修改表名 rename table student to teacher;
SQL基本知识: 1.表与表之间的关系处理: 一对多:在多的一方创建一个列作为外键,指向一方主键; 多对多:新建一张中间表,至少包含两个列,都作为外键,分别指向各自的主键; 一对一:先当做一对多,在外键字段添加唯一约束; 外键添加的语法: alter table 表 add foreign key(列[外键]) references 表(列[主键]) 例如:alter table score add foreign key(sid1) references student(sid) 2.sql的连接查询: 1.内连接查询: select * from a inner join b on 连接条件 [where 其它条件] 例如:SELECT * from t_category c INNER JOIN t_product p ON c.cid = p.cno; 2.外连接查询: select * from a left outer join b on 条件 例如:SELECT * FROM t_category c LEFT OUTER JOIN t_product p ON c.cid = p.cno 内连接查询与外连接查询的区别: - 内连接: 查询的是两个表的公共部分,满足连接条件的部分 - 左外连接: 以左边表为主表, 查询出左边表的所有的数据. 再通过连接条件匹配出右边表的数据, 如果满足连接条件, 展示右边表的数据; 如果不满足, 右边的数据通过null代替; 3.子查询: 1.子查询的结果是一个值的情况: 子查询结果是单行单列,肯定在WHERE后面作为条件,父查询使用:比较运算符,如:> 、<、<>、= 等 SELECT * FROM 表 WHERE 列 =(子查询); 例如: select * from product where cno = (SELECT cid FROM category where cname ='手机数码'); 2.子查询的结果是单列多行的情况: 子查询结果是单例多行,结果集类似于一个数组,父查询使用IN运算符; SELECT * FROM 表 WHERE 列 in (子查询); 例如:SELECT * FROM t_product WHERE cno in (SELECT cid FROM t_category WHERE cname in('手机数码','食物')); 3.子查询的结果是多行多列的情况: 子查询结果是多行多列,肯定在FROM后面作为表; 子查询作为表需要取别名,否则这张表没有名称则无法访问表中的字段; 例如: SELECT MAX(c1.price) from (SELECT * FROM product where cno = 1) as c1;