一:入门语句
1.创建数据库 (数据库名字不能修改)
create database php; 创建一个名为php的数据库
2.创建数据表
create table class ( stu int, name varchar(6), age int ); 创建了一个class表,学生int型,名字varchar型,年龄int型。
3.删除数据库
drop database php; 删除php数据库
4.修改表名字
rename table oldname to newname;
5.查看表结构
desc tablename;
二.增删改查
1.插入
insert into tablename (id, name, title) values (1, 'zhangsan', 'notitle');
一次可插入多个:
2.改
update msg set content = 'thefirst' where id = 1;
还有一种ALTER命令:
如:alter table class add age2 int unsigned; 向表中增加一列。
3.查
select name,content from msg where id > 2; name,content控制部分列,id控制部分行。
4.删
delete from msg where id = 5;
三.整型列的字节与存储规范
整型有:
整型列的可选属性:
tinyint(M) unsigned zerofill M: 宽度(在0填充的时候才有意义,类似于printf的宽度), unsigned: 无符号类型 zerofill(0填充,默认无符号)
1.列可以声明默认值。
NULL不呢和任何值比较,不能使用!=,=,null=null等比较方式,只有一种select null is null;
所以我们需要声明默认值。
比如:alter table class add age5 tinyint not null default 0;
二:浮点型
mysql支持的三个浮点类型是float,double和decimal类型。float单精度,double双精度。
与整型一样,这些类型也有附带参数:一个显示宽度指示器和一个小数点指示器。比如float语句float(7,3)规定显示的值不超过7位数组,小数点后面带有三位数字。
对于小数点后面位数超过允许范围的值,MySQL会自动地将它四舍五入为最接近它的值,再插入它。
decimal数据类型用于精度要求非常高的计算中,这种类型允许指定数值的精度和计数方法作为选择参数,精度在这里值为这个值保存的有效数字的总个数,而计数方法
表示小数点后数字的位数。比如语句decimal(7,3)规定了存储的值不会超过7位数字,并且小数点后不超过3位。
忽略decimal数据类型的精度和计数方法修饰符将会是mysql数据库吧所有标识为这个数据类型的字段精度设置为10,计算方法设置为0。
三:字符型
有char,varchar,text三种类型。
面试问:char 和 varchar 有什么区别?
字符数(不是字节数)。
varchar:变长字符串, varchar(M)同样代表可容纳的字符数。
区别在哪呢?
char定长:M个字符,如果存的小于M个字符,实占个字符。 利用率i/M <= 100
varchar变长:M个字符,存的小于M个字符,实战i个字符+1到两个字节 ,利用率i/(i+1-2) < 100%
使用额外的1-2字节来存储值长度,列长度<=255使用1字节保存,其它情况使用2字节保存。例如varchar(10)会占用11字节存储空间,varchar(500)会占用502字节存储空间;
char和varchar区别
char类型: 对英文(ASCII)字符占用1个字节,对一个汉字占用2个字节,char存储定长数据很方便,char字段上的索引效率级高,比如定义char(10),那么不论你存储的数据是否达到了10个字节,都要占去10个字节的空间。因为是固定长度,所以速度效率高。
varchar类型:varchar 的类型不以空格填满,比如varchar(100),但它的值只是"qian",则它的值就是"qian"
而char 不一样,比如char(100),它的值是"qian",而实际上它在数据库中是"qian "(qian后共有96个空格,就是把它填满为100个字节)。
varchar存储变长数据,但存储效率没有char高。如果一个字段可能的值是不固定长度的,我们只知道它不可能超过10个字符,把它定义为 varchar(10)是最合算的。varchar类型的实际长度是它的值的实际长度+1。为什么“+1”呢?这一个字节用于保存实际使用了多大的长度。
1.char的长度是固定的,而varchar2的长度是可以变化的, 比如,存储字符串“abc",对于char (20),表示你存储的字符将占20个字节(包括17个空字符),而同样的varchar2 (20)则只占用3个字节的长度,20只是最大值,当你存储的字符小于20时,按实际长度存储。由于char是以固定长度的,所以它的速度会比varchar快得多!但程序处理起来要麻烦一点,要用trim之类的函数把两边的空格去掉!
2.char的效率比varchar2的效率稍高。
3.目前varchar是varchar2的同义词。工业标准的varchar类型可以存储空字符串,但是oracle不这样做,尽管它保留以后这样做的权利。Oracle自己开发了一个数据类型varchar2,这个类型不是一个标准的varchar,它将在数据库中varchar列可以存储空字符串的特性改为存储NULL值。如果你想有向后兼容的能力,Oracle建议使用varchar2而不是varchar。
何时该用char,何时该用varchar?
char与varchar2是一对矛盾的统一体,两者是互补的关系。
varchar2比char节省空间,在效率上比char会稍微差一些,即要想获得效率,就必须牺牲一定的空间,这也就是我们在数据库设计上常说的‘以空间换效率’。
varchar2 虽然比char节省空间,但是如果一个varchar2列经常被修改,而且每次被修改的数据的长度不同,这会引起‘行迁移’(Row Migration)现象,而这造成多余的I/O,是数据库设计和调整中要尽力避免的,在这种情况下用char代替varchar2会更好一些。
char和varchar选择原则:
1.空间利用效率:四字成语表,char(4)
个人简介,微博,140字,varchar(140)
2.速度考虑 比如:用户名建议char
test字符型,文本串。可以存较大的文本段,搜索速度稍慢,不要加默认值。
四:日期时间类型
1991-2155年。如果非法,或者没输入,year类型默认0000.
所以你如果输入两位'00~69'表示2000~2069,'70~99‘表示1970~1999’年,所以输入的时候输4位就行了。
date类型:典型格式:1992-08-12
日期类型存储范围:‘1000-01-01’~'9999-12-31',存储范围较大
time类型:典型格式,hh:mm::ss
表示范围:-838:59:59~+838:59:59左右,因为它可以表示时间差。
datetime类型:典型格式,'1989-05-06 14:32:08‘,格式是date和time相加之和。
表示范围:1000-01-01 00:00:00 ~ 9999-12-31 23:59:59。
实际开发中一般不用日期事件类型,而用时间戳。
时间戳是1970-01-01 00:00:00到当前的秒数。
时间戳是一个int类型。
类型面试题:性别用什么存储?
1.tinyint 1个字节,用1表示男,0表示女
2.enum类型 比如: create table t2 ( gender enum('man', 'woman') ); 性别gender枚举为man和woman,但是这和关系型数据库设计理念相违背,不是原子性。 因为它的的值即可能是男也可能是女。而且在字节上也不必tinyint节省。