[sql]sql语法剖析
目录:
1. 创建相关的命令
2. 表的插入
3. 表的
一,创建
1. 建库
2. 建表(table)
mysql> create table Persons( id int unsigned AUTO_INCREMENT, lastname varchar(20), firstname varchar(10) NOT NULL, address char, age integer(3), family int(2), birthday date, info text, created timestamp default(CURRENT_TIMESTAMP), uptate time, PRIMARY KEY (id, firstname) );
mysql> create table Family( lastname varchar(10) NOT NULL PRIMARY KEY, origin char(15), history FLOAT(4,1) );
【说明】
1. 属性
1) AUTO_INCREMENT: 自动加1;
2) PRIMARY KEY(主键)
一张表中要保证没有重复的条目,所以就需要将某个字段设置成主键, 主键不允许重复, 于是整条条目也就不会重复。主键总体来说具有如下特性:
值唯一;
1) AUTO_INCREMENT: 自动加1;
2) PRIMARY KEY(主键)
一张表中要保证没有重复的条目,所以就需要将某个字段设置成主键, 主键不允许重复, 于是整条条目也就不会重复。主键总体来说具有如下特性:
值唯一;
主键列不能包含null值;
只能有一个主键但可以建立复合主键;
可以提高查询效率;
非必须;
3)Unique 与 PRIMARY KEY的区别
参考:看样子是只有空与非空的区别
https://stackoverflow.com/questions/9565996/difference-between-primary-key-and-unique-key
2. 常用字段类型
1) char 与 varchar 与 text
char: 表示固定长度的字符串, 括号中指定的是字符串的长度, 可以省略,缺省为1个字符长度; 插入数据超过限值则报错。
varchar: 表示可变长度字符串, 必须指定最大长度(即限值,最大取值255),如果内容超过限值则会报错(wxy: 有的博文说是会被转换成text类型?)
均属于SQL Server 数据类型中的Character类型
text:属于Microsoft Access 数据类型(最大长度255个字符), 和
属于MySQL 数据类型(存放最大长度为 65,535 个字符), 和
属于SQL Server 数据类型(2GB字符数据)
2) int(系列) 与 integer
int:占用4字节存储, 无符号表示-2,147,483,648 ~ 2,147,483,647; 有符号使用unsigned属性(即 int unsigned)则表示0 到 4294967295;
可以指定长度....;
属于MySQL, SQL Server 数据类型中的Number类型。
Integer:占用2字节, -32,768 到 32,767 之间的数字, 长度设置可选,表示
属于Microsoft Access 数据类型。
3) 浮点数
FLOAT(size,d),Mysql的Number类型,表示带有浮动小数点的小数字。在括号中规定最大位数。在 d 参数中规定小数点右侧的最大位数(比如2000.1, 20.22就是不正确的长度)。
DOUBLE(size,d)表示带有浮动小数点的大数字; Single/Double是MASQL家的;
FLOAT(size,d),Mysql的Number类型,表示带有浮动小数点的小数字。在括号中规定最大位数。在 d 参数中规定小数点右侧的最大位数(比如2000.1, 20.22就是不正确的长度)。
DOUBLE(size,d)表示带有浮动小数点的大数字; Single/Double是MASQL家的;
n. 其他
1)"Describe"是特殊关键字, 不能用作表字段。
1)"Describe"是特殊关键字, 不能用作表字段。
二. 删除操作
三. 操作表数据(insert, update)
方式一: INSERT INTO 表名称 VALUES (值1, 值2,....)
mysql>insert into Persons values(3,'wu','xiaohong','L',40,4,'1980-4-1','I am superman!',CURDATE(),NOW());
解析: 必须为所有字段赋值,即使是自增的id也需要手动指定
方拾二:INSERT INTO table_name (列1, 列2,...) VALUES (值1, 值2,....)
mysql> insert into Persons (lastName, firstName, Address) VALUES ('wu','xiaohong1', 'H');
解析: id会自增, 其他非空字段不允许置空, 字符串长度不能超过限值;
注: 字段名称貌似是模糊匹配,大小写不同的话也能正确插入;
1.关于时间的函数
NOW(): 函数以`'YYYY-MM-DD HH:MM:SS'返回当前的日期时间,可以直接存到DATETIME字段中。
CURDATE(): 以’YYYY-MM-DD’的格式返回今天的日期,可以直接存到DATE字段中。
CURTIME(): 以’HH:MM:SS’的格式返回当前的时间,可以直接存到TIME字段中。
三. 向表中插入数据(insert)
n. 查看存储占用
1)字符串长度len(mssql) 或 length(mysql)
1)字符串长度len(mssql) 或 length(mysql)
mysql> select length(firstName), firstname from Persons; +-------------------+-----------+ | length(firstName) | firstname | +-------------------+-----------+ | 8 | xiaohong | | 9 | xiaohong1 | +-------------------+-----------+
2)占用字节数?(mysql) 或 datalength(mssql)
mysql> select datalength(firstName), firstname from Persons; ---???待实验