数据库就是用来存储和管理数据的仓库!
数据库存储数据的优先:
l Oracle:甲骨文;
l DB2:IBM;
l SQL Server:微软;
l Sybase:赛尔斯;
l MySQL:甲骨文;
l DDL(Data Definition Language):数据定义语言,用来定义数据库对象:库、表、列等;
l DML(Data Manipulation Language):数据操作语言,用来定义数据库记录(数据);
l DCL(Data Control Language):数据控制语言,用来定义访问权限和安全级别;
l DQL(Data Query Language):数据查询语言,用来查询记录(数据)。
Create database db_name;
Show databases;
Show create database db_name;
Drop database db_name;
Alter database db_name [修改指令]:修改指令一般是数据库属性的修改(比如字符集)
Alter database db_name character set utf-8;
将当前数据库进行备份,删除之前的数据库,并创建新的数据库,恢复原来数据库的数据。
CREATE TABLE 表名(
列名 列类型,
列名 列类型,
......
);
Show tables;
Show tables like ‘xxx_%’;
Show create table tb_name;
Show create table tb_name\G
Desc tb_name;
Drop table if exists tb_name;
Rename table old_tb to new_tb;
增加一个新列:alter table tb_name add 列定义(name int);
删除一个列:alter table tb_name drop 列名;
修改一个列定义:alter table tb_name modify 列名 varchar(40);
重命名一个列:alter table tb_name change 旧列名 新列定义;
修改表选项:alter table tb_name character set utf-8;
INSERT INTO 表名(列名1,列名2, …) VALUES(值1, 值2)
语法:
INSERT INTO 表名 VALUES(值1,值2,…)
因为没有指定要插入的列,表示按创建表时列的顺序插入所有列的值:
Select * from 表名 [查询条件];
Select 字段名列表 from 表名 [查询条件];
语法:
DELETE FROM 表名 [WHERE 条件]
语法:
UPDATE 表名 SET 列名1=值1, … 列名n=值n [WHERE 条件]
Create unique index Stusno on student(Sno);
Create unique index SCno on Sc(sno ASC,Cno DESC);
Unique:表示每个索引值只对应唯一的数据记录
Cluster:表示简历聚簇索引。
Alter index <old_Index_name> rename to <new_Index_name>;
Drop index <index_name>;
例:tinyint:一个字节(8位)
有符号(-128——127) 无符号(0——255)
其他整型类似
可以在定义时,使用unsigned标识没有符号,如果不写,则有符号。
Alter table tb_name add c tinyint(2):
2表示显示的最小宽度,当宽度不够,需要使用前导0填充,在数据库中叫做zerofill
bool,其实就是tinyint(1)的别名
小数位可以移动,分为float和double
对于123.456,存储的时候存的是123456和3(因为0.123456*10^3)
对于float,默认情况下,有效数位是6-7位,double的默认有效数位是16位左右,比如:同样存储123456789.10283637,float表示出来可能就是123456700,double表示出来可能就是123456789.102836
同样浮点数也支持控制数值范围,Type(M,D):M表示所有数值位数(不包括小数点和符号位),D:表示有效的小数位数。
不管怎样浮点数肯定有精度丢失的 问题,如果必须要求精度,可以采用定点数DECIMAL,在存储的时候采用小数整数分开,每9位为一组采用4字节存储(同样也做了优化,当不足9位的时候,适当采用合适的字节存储)
注意:
01)datetime(年月日时分秒)、timestamp(时间戳),这两个表现形式一样,但是存储格式不同(timestamp储存的时候是整型),因为储存的格式不同,所以表示的范围也就不相同。
02)支持任意分隔符的日期,但是容易出现歧义。
03)支持2位的年份
70-69(1970-2069)
70-99(1970-1999)
0-69(2000-2069)
04)MySQL支持0值,比如0000年00月00日 00:00:00
2004-04-00:表示4月份整个月
05)time可以表示一天中的时间,也可以表示时间间隔(两个时间点相差了多少小时)。
这里的最大长度是物理最大长度
可以看出不一样的编码,字段长度是不一样的(Latin一个字符等于一个字节)
注意:字段的最大长度,除了类型本身限制之外,记录的总长度也有限制
这个图可以看出,65532可以创建成功,65533创建不成功;但是当65533加上not null之后,可以创建成功,如下图:
原因是:
这个sql也创建不成功,因为a,b都有可能为null,varchar不够存储,所以会报错。
规定一个字段是否为空:null|not null
(空值和空字符串不一样,null的话一定有一个表示空间,在整个记录上某个地方记录null,所有会有一定的储存空间)
Default value来声明
关系模型的实体完整性在create table中用primary key定义。对单属性构成的码有两种说明方法,一种是定义为表级约束条件,另一种是列级约束条件。对于多个属性构成的码只有一种说明方法,即定义为表级约束条件。
实体完整性检查和违约处理
01)检查主码值是否唯一,如果不唯一则拒绝插入或者修改数据。
02)检查主码的各个属性是否为空,只要有一个为空就拒绝插入或者修改。
常见的设计:
每个表都应该存在一个可以唯一标识的主键字段,最好与实体没有关系,不是实体属性字段。
利用一个中间表,表示实体之间的对应关系,即两个一对多
概念:
如果一个实体(student)的某个字段(student:class_id),指向(引用)另外一个实体(class)的主键(class:class_id),就称student实体的class_id是外键。
本文出自 “秦斌的博客” 博客,谢绝转载!
原文:http://qinbin.blog.51cto.com/11773640/1952168