对客观事物的(抽象)符号表示,如图形符号、数字、字母等,数据是数据库中存储的基本对象。
(1)是长期存储在计算机内的、有特定组织结构的、可共享的数据集合。
(2)数据冗余度小,可以节省数据的存储空间。
数据库管理系统是管理数据库的软件,数据库管理系统不仅能够实现对数据的快速检索和维护,还为数据的安全性、完整性、并发控制和数据恢复提供了保证。
数据库及其管理软件组成的系统。是一个实际可运行的存储、维护和应用系统提供数据的软件系统
数据持久化就是将内存中的数据模型转换为存储模型,以及将存储模型转换为内存中的数据模型的统称,数据模型可以是任何数据结构或对象模型,存储模型可以是关系模型、XML、二进制等。
(1)数据量较大,如何保证检索和访问效率
(2)如何保证数据的一致性和完整性
(3)如何解决数据的共享和安全
文件系统:使用磁盘文件来存储数据
第一代数据库:网状模型、层次模型的数据库
第二代数据库:关系型数据库和结构化查询语言(SQL)
MySQL是被广泛使用的开源的数据库管理系统,开发者为瑞典MySQL AB公司。目前MySQL被广泛应用在Internet上的中小型网站中,
结构化查询语言(Structured Query Language
SQL是在关系型数据库上执行数据操作、数据检索以及数据维护的标准语言。
使用SQL语句可以完成如下任务:
create drop alter rename truncate
insert delete update select
grant revoke
commit rollback savepoint
书写规范:
sql语句的关键字不区分大小写
SQL语句可单行或多行书写,以“;”结尾
关键字不能夸多行。
注释:
SQL标准:/多行注释/
MySQL单行注释:#
类型 | 字节 | 范围(有符号) | 范围(无符号) |
---|---|---|---|
TINYINT | 1 | -128,127 | 0,255 |
SMALLINT | 2 | -32768,32767 | 0,65535 |
MEDIUMINT | 3 | -8388608,8388697 | 0,16777215 |
INT/INTEGER | 4 | -2147482648,2147483647 | 0,4294967295 |
BIGINT | 8 |
TINYINT SMALLINT MEDIUMINT INT BIGINT可以指定显示宽度。如:INT(10),显示宽度取值范围从1-255,它表示该列值显示的字符位数,不影响他能够存储的值得范围。
如果定义整数列时没有指明显示宽度,则缺省显示宽度为该类型的最长为数,INT类型就是11位。
可使用UNSIGNED修饰符表示无符号整数类型。
M是数字最大位数,范围1-65;D是小数点后面的数字个数,范围0-30,不得超过M。如果未给出M和D,等效于DECIMAL(10,0)。DECIMAL数据类型在内存中以字符串存储,用于精确度要求非常高的计算。
4字节 单精度浮点型
8字节 双精度浮点型
注:
1、浮点类型不能是unsigned 的,起取值范围也与整型不同,这些类型有最大值,而且还有最小非零值。
2、M和D对float和Double都是可选的,但对decimal是必须的。
必须以字母开头,后续字符可以是字母、数字和三个特殊字符(#_$)
最大长度不能超过64字符
不能使用mysql的保留字
同一个数据库中的对象不能同名。
CREATE TABLE students(
student_id INT PEIMARY KEY NOT NULL UNIQUE,
student_name VARCHAR(20) NOT NULL,
);
DROP TABLE student;
1、修改列类型
ALTER TABLE students MODIFY students CHAR(20);
不是任何情况都可以修改的,当字段只包含空值时,类型、大小都可以修改,否则修改可能不能成功
2、增加列
ALTER TABLE students ADD sex VARCHAR(20);
3、删除列
ALTER TABLE students DROP COLUMN sex;
4、更改表名
RENAME TABLE students to student_new;
约束是在表上所定于的数据校验规则,用于保证数据的完整性。
NOT NULL 非空
UNIQUE 唯一
PRIMARY KEY 主键
FOREIGN KEY 外键
CHECK 检查
创建约束的时机
CREATE TABLE students(
id int PRIMARY KEY NOT NULL UNIQUE CHECK()
);
CREATE TABLE xm_student(
id INT,
name VARCHAR(20),
sex VARCHAR(20),
CONSTRAINT stu_pk PRIMARY KEY(ID)
)
CREATE TABLE tb_student(
id INT PRIMARY KEY,
name VARCHAR(20),
)
非空约束用来确保字段值不为空,该约束只能使用列级约束语法。
CREATE TABLE XM_STUDENT(
ID INT PRIMARY KEY,
NAME VARCHAR(20) NOT NULL
)
CREATE TABLE XM_NAME(
ID INT PRIMARY KEY,
NAME VARCHAR(20),
CONSTRAINT UQ_NAME UNIQUE(NAME)
)
(1)子表被外键约束的列,其参照的只能是主表具有主键约束或唯一约束的列;
(2)子表被外键约束的列,其值必须在主表列值的范围内,或者为空。
(3)当主表的记录被子表参照时,主表记录不允许被删除
/*子表tb_emp被主表xm_student约束*/
CREATE TABLE tb_emp(
employee_id INT PRIMARY KEY,
employee_name VARCHAR(20),
dept_id INT,
CONSTRAINT fk_emp_dept FOREIGN KEY(dept_id) REFERENCES XM_STUDENT(id)
)
CREATE TABLE TB_STUDENT(
ID INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(20),
AGE INT CHECK(AGE>18 AND AGE<60)
)
/*ALTER TABLE TableName MODIFY ColName ColType {NULL/NOT NULL}*/
-- 添加
ALTER TABLE XM_STUDENT MODIFY ID int NOT NULL;
-- 删除
ALTER TABLE XM_STUDENT MODIFY ID INT NULL;
/*语法:ALTER TABLE TableName ADD [constraint consName] consType(column);*/
ALTER TABLE XM_STUDENT ADD CONSTRAINT PK_ID PRIMARY KEY(ID);
ALTER TABLE XM_STUDENT ADD PRIMARY KEY(ID);
/*ALTER TABLE 表名 DROP PRIMARY KEY*/
ALTER TABLE XM_STUDENT DROP PRIMARY KEY;
/*ALTER TABLE 表名 MODIFY 列名 INT,DROP PRIMARY KEY;*/
ALTER TABLE XM_STUDENT MODIFY XM_ID INT,DROP PRIMARY KEY;
/*ALTER TABLE 表名 DROP FOREIGN KEY 外键约束名*/
ALTER TABLE XM_STUDENT_ DROP FOREIGN KEY XM_ID_
/*ALTER TABLE 表名 DROP INDEX 约束名*/
ALTER TABLE XM_STUDENT DROP INDEX NAME;
总结:
-- 创建主表
CREATE TABLE XM_STUDENT(
XM_ID INT,
XM_NAME VARCHAR(20)
)
-- 删除表
DROP TABLE xm_student_;
-- 创建子表
CREATE TABLE XM_STUDENT_(
xm_id_ INT AUTO_INCREMENT PRIMARY KEY,
XM_name_ VARCHAR(20)
)
-- 添加主键约束
ALTER TABLE XM_STUDENT ADD PRIMARY KEY(xm_id);
-- 添加非空约束
ALTER TABLE XM_STUDENT MODIFY XM_ID INT NOT NULL;
-- 添加唯一约束
ALTER TABLE xm_student ADD CONSTRAINT uq_name UNIQUE(xm_name);
ALTER TABLE xm_student ADD UNIQUE(xm_name);
-- 添加外键约束
ALTER TABLE XM_STUDENT_ ADD CONSTRAINT fk_id FOREIGN KEY(xm_id_) REFERENCES XM_STUDENT(xm_id);
-- 删除主键约束
ALTER TABLE xm_student DROP PRIMARY KEY;
-- 删除带自增的主键
ALTER TABLE XM_STUDENT_ MODIFY xm_id_ INT,DROP PRIMARY KEY;
-- 删除唯一约束
ALTER TABLE xm_student DROP INDEX uq_name;
ALTER TABLE xm_student DROP INDEX xm_name;
CREATE TABLE DEPTS(
DEPT_ID INT PRIMARY KEY AUTO_INCREMENT,
DEPT_NAME VARCHAR(30),
DEPT_DESC VARCHAR(100)DEFAULT'部门描述的默认内容'
)
MyISAM:适用于大量读写,很少进行记录的更新和删除操作,且对事务的并发和完整性要求不高的场合。
InnoDB:适用于对事务完整性要求高,且存在大量并发事务的情况。
MEMORY:表中的数据存放在内存中,访问效率极高。但一旦服务关闭,数据全部丢失。
MERGE:是一组MyISAM表的组合,适用于单个MyISAM表满足不了容量要求的情况。
默认情况创建的表,将使用InnoDB存储引擎。
SHOW DATABASES;
CREATE DATABASE DatabaseName;
DROP DATABASE [IF EXISTS] DatabaseName;
USE DatabaseName;
SHOW TABLES;
DESC tableName;
CREATE TABLE tableName(…);
DROP TABLE tableName;
ALTER TABLE tableName;
数值类型:INT、 DECIMAL、 FLOAT、 DOUBLE
日期类型:DATE、 TIME、 DATEIME
字符串类型:CHAR、 VARCHAR、TEXT、BLOB
NOT NULL
UNIQUE
PRIMARY KEY
FOREIGN KEY
CHECK
设置自动增长及默认值
CREATE TABLE goods_info(
goods_id INT PRIMARY KEY,
goods_name VARCHAR(20) UNIQUE NOT NULL,
manufactory VARCHAR(20),
stock VARCHAR(20)
)
CREATE TABLE incoming(
id INT PRIMARY KEY,
goods_id INT,
in_date DATE,
produce_date DATE,
quantity INT,
CONSTRAINT fk_id FOREIGN KEY(goods_id) REFERENCES goods_info(goods_id)
)