script src="http://static.tctip.com/tctip-1.0.0.min.js"> 1 2 3 4

二.数据库

1.数据库(Database)

是按照数据结构来组织、存储和管理数据的仓库,每一个数据库都有一个或多个不同的API用于构建,访问,管理搜索和复制所保持的数据

关系型数据库:Oracle,Mysql , SqlServer , DB2 ,Postgresql , Sqlite , access

2.DBMS术语:

   1.数据库:是一些关联表的集合

   2.数据表:表是数据的矩阵,在一个数据库中的表看起来像一个简单的电子表格

   3.列:一列(数据元素)包含了相同的数据,例如邮政编码的数据

   4.行:一行(二元组或记录 )是一组相关的数据,例如一条用户订阅的 数据 

   5.冗余:存储两倍数据,冗余可以是系统更快

   6.主键:主键是唯一的,一个数据表中指包含一个主键,你可以使用主键来查询数据

   7.外键:用于关联两个表

   8.复合键:复合键(组合键)将多个列作为一个索引键,一般用于复合索引

   9.索引:使用索引可快速访问数据列表中的特定信息,索引是对数据库表中一列或多列的值进行排序的一种结构,类似于书籍的目录

   10.参照完整性:参照的完整性要求关系中不允许引用不存在的实体。与实体完整性是关系模型必须满足的完整性约束条件,目的是保证数据的一致性

3.Mysql数据库

Mysql是最流行的关系型数据库管理系统, 在WEB应用方面Mysql是最好的应用软件之一

Mysql是一种关联型数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内

show grants from alex;  查看alex用户的权限

  类型     字节   范围    范围    用途

 TINYINT    1字节   ()  (0,255)    小整数值

 SMALLINT 2字节     (0,65535)      大整数值

  MEDIUMINT  3字节    (0,16777215)       大整数值

 int或integer 4字节    (0,4294967295)    大整数值

 BIGINT       8字节                极大整数值

     FLOAT      4字节             单精度浮点数值

 DOUBLE     8字节            双精度浮点数值

 DECIMAL

  类型  字节     范围                     格式                      用途

  DATE       3   1000-01-01/9999-12-31           YYYY-MM-DD                    日期值

  TIMB  3     "-838:59:59"/"838:59:59"          HH:MM:SS                   时间值或持续时间

  YEAR   1    1901/2155                YYYY-MM-DD                    年份值

DATETIME    8    1000-01-01 00:00:00/9999-12-31 23:59:59    YYYY-MM-DD HH:MM:SS           混合日期和时间值

TIMESTAMP  4   1970-01-01 00:00:00/2037年某时       YYYYMMDDHHMMSS               混合日期和时间值,时间戳   

     类型          大小              用途

   CHAR         0-255字节           定长字符串

  VARCHAR        0-65535字节           变成字符串

  TINYBLOB       0-255字节          不超过255个字符的二进制字符串

  TINYTEXT        0-255字节            短文本字符串

  BLOB          0-65535字节       二进制形式的长文本数据

  TEXT          0-65535字节         长文本数据

MEDIUMBLOB                    二进制形式的中等长度文本数据

MEDIUMTEXT                     中等长度文本数据

LONGBLOB                      二进制形式的极大文本数据

LONGTEXT                       极大文本数据

  

4.操作命令

一.数据库操作命令

1.show databases; #查看都有什么数据库,所有数据库列表

2.use mysql; #进入某个数据库

3.create database ylz; #创建一个叫ylz的数据库,只支持英文

4.create database ylz charset gbk; #创建一个支持gbk的数据库

5.create database if not exists ylz;#不确认ylz是否存在,不报错创建,会有一条warning信息(用show warning; 打开错误信息)

5.show create database ylz; #显示ylz基本信息,包括编码方式

6.create database if not exists ylz character set gbk;创建一个gbk编码的ylz(第二种创建)

7.alter database ylz character set gbk; #修改数据库ylz编码方式

8. use ylz; #进入某个数据库,也可以相互切换

9. select database();  #查询在哪个数据库

二.表的操作命令

数据类型大致可以分为三类:数值,日期/时间和字符串(字符)类型

主键 :非空且唯一 :not null  ,unique

 

1.NOT NULL  不能为空

2.PRIMARY KEY 主键

3.auto_increment 自增

4.default 默认值

1.创建一个表,并设计其中要输入内容的主题(id),以及后面跟的名称和数据类型(TINYINT), PRIMARY KEY(主键唯一且不为空),自动生成id(auto_increment), default 18(默认值)

CREATE TABLE employee(
id TINYINT PRIMARY KEY auto_increment,
name VARCHAR(25),
gender boolean,age INT ,
department VARCHAR(20),
salary DOUBLE(7,2)
);
相当于 id name gender department salary
(自动生成) (等待插入内容)

2.查询表

SHOW TABLES; #查看某个数据库中的所有表

DESC employee; #查看employee表结构和参数

SHOW CREATE TABLE employee; #查看表创建的语法内容

3.修改表名(rename)

RENAME TABLE employee TO emp;  #rename 修改一个表名

4.删除表

DROP TABLE emp;#删除表

5.添加字段(add)

   ALTER TABLE employee ADD is_married tinyint(1); #添加字段,名称+数据类型

   ALTER TABLE employee ADD entry_date date not null; #添加字段,名称+数据类型 +约束条件不为空

   ALTER TABLE employee ADD a int,ADD b varchar(20); #添加多个字段,用逗号分开

6.删除字段(drop)

 ALTER TABLE employee DROP a; #删除字段

7.修改字段(modify)

ALTER TABLE employee MODIFY age smallint not null default 18 after id; #修改age字段,smallint,not null , default 18(默认值),after id(把它放在id后面)

ALTER TABLE employee CHANGE department depart varchar(20); #修改字段名,旧字段名+新字段名+属性+其他

8.内容操作

   1.插入(inse into)

INSERT INTO emp(id,age,name,gender,depart ,salary,is_married)
VALUES(1,18,"ALEX",0,"技术部",1700,1); #单个添加

INSERT INTO emp(age,name,salary) VALUES(18,“alex”,7000),

                                                                            (28,"ming",8000),

                                                                            (25,"li",6000);   #多个添加,不加字段就都添加内容

INSERT INTO emp SET name="aaa"; #键值对赋值,一一对应

   2.查询内容 

SELECT * FROM emp;  #查看表emp的内容,/G 竖着显示

SELECT * FROM emp LIMIT 2;  #查看表emp前两条内容

SELECT * FROM emp LIMIT 2 OFFSET 2;  #查看表emp两条后的内容

SELECT * FROM emp WHERE id>3; #查询id>3的内容,WHERE id>3 AND ange<20;  #多条件

SELECT DISTINCT name FROM emp WHERE  name LIKE“m” #相似查询

SELECT * FROM emp WHERE  data LIKE "2016-04%";   日期相识查询

SELECT * FROM emp WHERE name REGEXP "^al";  按正则来匹配

3.升序

select * from emp ORDER BY data;     data按升序排列

4.分组统计

SELECT name FROM emp;  #把emp表中name列统计成表返回 ,可以多个返回

SELECT DISTINCT name FROM emp;  #distinct去重功能,把相同name的第一个返回其他不返回

SELECT name,age+10 FROM emp;  #age+10,但是只在返回界面中加,数据库不变,下次还是原数据

SELECT name AS 姓名,age AS age年龄 FROM emp;  #在返回列表中起一个别名

SELECT data,count(*) FROM study GROUP BY data;  把data里的数据按data和count(*)名统计,并计算次数,有相同信息,只显示第一个,sum()和, avg()平均数,

SELECT name,data FROM study ORDER BY data;  把data里的数据输出name和data,按id排

SELECT data,count(*) FROM study GROUP BY data HAVING count(*)>2;  把data里的数据按data和count(*)名统计,并计算次数,且显示次数大于2的,where先执行,having是先执行select再执行

SELECT  MAX()    FROM study;MIN(ifnull(data,0))  最大值,最小值

 

5.修改内容

UPDATE emp SET salary=salary+2000 WHERE name="ming"; #不添加条件就都修改,也可以按id修改或id>4 ,id=1 or  id=2

6.删除内容

DELETE FROM emp WHERE name=“ming”;#不加条件就都删除了,一条一条删除

TRUNCATE TABLE emp;#统一一下删掉,相当于把表删掉,然后在创建一个emp

3.外键

FOREIGN KEY (charger_id) REFERENCES class(id)      ENGINE=INNODB;

   1.创建一个父表classcharger

create table classcharger(id TINYINT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(25));

 insert into classcharger(name) values ("小明老师"),("小华老师"),("小天老师");

2.创建一个学生表子表student

create table student(id TINYINT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(25),class_id TINYINT , FOREIGN KEY (class_id) REFERENCES classcharger(id)); 没有给外键起名

create table student(id TINYINT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(25),class_id TINYINT ,CONSTRAINT sut_id  FOREIGN KEY (class_id) REFERENCES classcharger(id));  外键名

insert into student(name,charger_id) values ("alex",1 ),("ylz",4),("tian",5),("ming",4),("zh",1);

ALTER TABLE student ADD CONSTRAINT 外键名  FOREIGN KEY (charger_id) REFERENCES classcharger(id); 添加外键

ALTER TABLE student DROP FOREIGN KEY 外键名;删除外键名

3.INNODB支持on语句(级联删除)

在父表里添加,则删除父表内容则子表关联的也删除

create table student(id TINYINT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(25),class_id TINYINT , FOREIGN KEY (class_id) REFERENCES classcharger(id)  on DELETE CASCADE);

ON DELETE SET NULL; 对父表操作时,子表相关联的全部变为 null值

create table student(id TINYINT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(25),class_id TINYINT ,CONSTRAINT sut_id  FOREIGN KEY (class_id) REFERENCES classcharger(id) ON DELETE SET NULL); 

 也可以用alter 添加

4.多表查询

   1.多表查询之连接查询

create table c2(id TINYINT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(25));

 insert into c2(name) values ("小明老师"),("小华老师"),("小天老师");

create table s2(id TINYINT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(25),class_id TINYINT);

insert into s2(name,charger_id) values ("alex",1 ),("ylz",2),("tian",3),("ming",3),("zh",1);

1.内连接:inner join

 select * from s2,c2 where s2.class_id=c2.id;  #

select s2.name,c2.name,c2.id from s2,c2 where s2.class_id=c2.id;

select * from s2 inner join c2 on   s2.class_id=c2.id;

 

2.外连接:left join  ,right join

select * from s2 left join c2 on   s2.class_id=c2.id; 以s2为主表,没有关联的也显示出来

select * from s2 right join c2 on   s2.class_id=c2.id; 以 c2为主表,没有关联的也显示出来

3. 全连接full join

select * from s2 full join c2 on   s2.class_id=c2.id; 全连接,是left join 和right join的结合

select * from s2 left join c2 on   s2.class_id=c2.id union  select * from s2 right join c2 on   s2.class_id=c2.id; 相当于这种写法

union 与union all 的区别,union 会去掉相同的记录

 

2.复制表

create table aa(select * from c2);  约束键不会复制过来

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1

posted @ 2019-12-16 11:14  第365号回归者  阅读(240)  评论(0)    收藏  举报