四、数据字段属性
unsigned 可以让空间增加一倍(有符号转无符号) -128~127 0~255
//只能用于数据值型字段
//Eg_1;
zerofill 只能用于数值字段,前导0??
//就是前面补0 自动加上unsigned
//有符号是不能加上前导0
//Eg_2;
auto_increment
//只能是整数,数据每增加一条,,自动加一,,不允许重复
// NULL 0 留空 每个字段最好都有一个ID这个东西
//Eg_3;
/*ERROR 1075 (42000): Incorrect table definition; there can be only one auto colum
n and it must be defined as a key 这个错误...诶竟然要创建什么索引..*/
null 和 not null 默认为空 NULL
//将来将这个表转换为php的程序的时候, 不一定转换成神农吗东东,,,,
//建议不要创建空值
//非空还可以用用~~~~~
default 缺省值
//(mon floot(5,3) not null default '0.00');缺省的值弄
CREATE TABLE users(
id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(30) NOT NULL DEFAULT '',
height DOUBLE(10,2) NOT NULL DEFAULT 0.00,
age INT NOT NULL DEFAULT 0,
sex char not null default '男'
);
五、创建索引
1.主键索引 [primary key] PRI
确定数据表里面一条特定数据记录的位置;
//这一列,,完全不允许重复
//最好为每一张数据表定义一个主键索引
//***一个表只能定义一个主键,,,设置的值不可为空****
**primary key是可以为主键定义一个可以在最后创建 如*****
/*在最后制定 primary key的值
CREATE TABLE users(
id INT UNSIGNED NOT NULL AUTO_INCREMENT ,
name VARCHAR(30) NOT NULL DEFAULT '',
PRIMARY KEY(id)
);*/
2.唯一索引 [unique] UNI
*都可以防止创建重复的值
*每个表都可以有多个唯一索引
//Eg_5
3.常规索引 [index] MUL
***最重要的技术,,常规索引,,可以提升数据库的性能//如果优化首先选择常规索引
/*例:
111
222
...
一万多条 怎找???太多了 就像是图书馆一样*/
*可以调高查找的速度,但是插入,删除,修改 会很慢!!//就像是大仓库和图书馆~
可以单独使用,也可以在创建表的时候单独的使用..(不懂)//和table是一个级别的
// create index ind1 on users(name,age);
// drop index ind1 on users;
* index 和 key是同义词;
*可以多列
//Eg_6
4.全文索引 [fulltext]
fulltext类型索引, 只能用在MyISAM上...,只有在varchar char text上使用!!
*也可以多个数据列使用
create table books(
id int,
bookname varchar(30),
price double,
detail text not null,
fulltext(detail,bookname),
index ind(price),
primay key(id));
select * from books where bookname like '%php%';//之前
select bookname,price from books where MATCH(detail) AGAINST('php');//之后查询的方法
收货:
drop table users;//删除表用
unsigned 是转有符号为无符号;
not null default这两个连着用(mon floot(5,3) not null default '0.00')
/*创建一个能用的表
CREATE TABLE users(
id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(30) NOT NULL DEFAULT '',
height DOUBLE(10,2) NOT NULL DEFAULT 0.00,
age INT NOT NULL DEFAULT 0,
sex char not null default '男'
);
*/
primary key是可以为主键定义一个可以在最后创建 如
/*在最后制定 primary key的值
CREATE TABLE users(
id INT UNSIGNED NOT NULL AUTO_INCREMENT ,
name VARCHAR(30) NOT NULL DEFAULT '',
PRIMARY KEY(id)
);*/
Eg_1:
use zp;
create table t1(id int unsigned);
insert into t1 values(100);
insert into t1 values(-100);
select * from t1;
↓↓ ↓↓ ↓↓ ↓↓
+------+
| id |
+------+
| 100 |
| 0 |
+------+//没有符号 最小为零
Eg_2:
create table t2(num1 int(5) zerofill,num2 float(5,2) zerofill,num3 char(5));
/* ↓ ↓↓ ↓↓ ↓↓ ↓↓ ↓
+-------+------------------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+------------------------------+------+-----+---------+-------+
| num1 | int(5) unsigned zerofill | YES | | NULL | |
| num2 | float(5,2) unsigned zerofill | YES | | NULL | |
| num3 | char(5) | YES | | NULL | |
+-------+------------------------------+------+-----+---------+-------+*/
insert into t2__2(num1,num2,num3) values(123456,123456.123,'asdfghj');
/* ↓ ↓↓ ↓↓ ↓↓ ↓↓ ↓
+--------+--------+-------+
| num1 | num2 | num3 |
+--------+--------+-------+ 这里就int类型超过了设置的5这个值,,其他都没有超过,,为什么呢?
| 123456 | 999.99 | asdfg | 因为这个是zerofill的前提,,,看下面例子
+--------+--------+-------+*/
insert into t2__2(num1,num2,num3) values(123,12.1,'sdfsdf');
/* ↓ ↓↓ ↓↓ ↓↓ ↓↓ ↓
+--------+--------+-------+
| num1 | num2 | num3 |
+--------+--------+-------+
| 123456 | 999.99 | asdfg |
| 00123 | 12.10 | sdfsd |前面补了零~~~一共5个数字 要这个干嘛~?
+--------+--------+-------+*/
Eg_3:
create table t3(id int auto_increment primary key,name char(10));//primary key必须加??加上去是因为不能让他重复!!!
/*这个key 和null 和extra有亮点~~
+-------+----------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+----------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | char(10) | YES | | NULL | |*/
insert into t3 values('aaaa');、 insert into t3 values(null,'aaaa');//插入多次
/*从插入过的最大值后增加 delete后也是这样 null是可以设置最大值
+----+------+
| id | name |
+----+------+
| 1 | sss |
| 2 | sss |
| 3 | sss |
| 4 | sss |
| 5 | sss |
| 6 | sss |
| 7 | sss |
| 8 | sss |
+----+------+ */
Eg_5:
mysql> create table users(
-> id int not null auto_increment,
-> name varchar(30) not null default '' unique,
-> age int,
-> primary key (id));
/*
+-------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(30) | NO | UNI | | |
| age | int(11) | YES | | NULL | |
+-------+-------------+------+-----+---------+----------------+*/
insert into users(name,age) values('aa',20);//成功
insert into users(name,age) values('aa',20);//再次创建失败~ Duplicate entry 'aa' for key 'name'
Eg_6:
mysql> create table carts(
-> id int not null,
-> uid int not null,
-> sid int not null,
-> number int not null
-> primary key(id),
-> key c_uid (uid),
-> index c_sid(sid));
/* ↓↓ ↓↓ ↓↓ ↓↓
+--------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------+---------+------+-----+---------+-------+
| id | int(11) | NO | PRI | NULL | |
| uid | int(11) | NO | MUL | NULL | |
| sid | int(11) | NO | MUL | NULL | |
| number | int(11) | NO | | NULL | |
+--------+---------+------+-----+---------+-------+*/
mysql> create table carts(
-> id int not null,
-> uid int not null,
-> sid int not null,
-> index c_su_id(sid,uid));//可以写多个在一起