在修改字段的数据类型时,从大类型到小类型,有可能造成数据的丢失,刚才将id的数据类型从SMALLINT改成了TINYINT,SMALLINT在UNSIGNED的情况下存储范围是65535到0之间的整数,而TINYINT,只是 0到255之间的一个整数,假设原有的数据表中,已经有了5000条记录,而现在我们改成了TINYINT的情况下,我们的5000数字并不能够容纳。这是老师的原话。我的理解是这样的:“这是5000个记录,而记录就是行,那么这个数据表中就有5000行,那么第5000行的id的值就是5000,显然5000不能用TINYINT来存储,因为TINYINT的存储范围最大只到255”。
2016-04-10
修改列定义:ALTER TABLE user2 MODIFY id TINYINT UNSIGNED NOT NULL FIRST;意思是:将数据表user2里的id字段的数据类型变成TINYINT,并且把id字段的位置放到第一位(FIRST),然后通过SHOW COLUMNS FROM user2出现的表格中,id字段由原来的第三位放到了第一位。
2016-04-10
删除了pid字段上的外键约束以后,通过输入SHOW CREATE TABLE user2;看见了这个:KEY 'pid' ('pid') 。老师说:这个字段还存在着索引,当然这个索引也不想要,就可以通过刚才的ALTER TABLE user2 DROP INDEX pid;删除pid上的索引。以上是老师的原话。以下是我的想法:删除索引的语句和删除唯一约束的语句一模一样,我大胆断定“一个字段有唯一约束,它就有索引功能。反过来,一个字段有索引功能,他一定有唯一约束。”另外pid删除了外键约束,还有索引功能,我得出结论:“一个字段若有外键约束,那么他也就有了索引功能,同样也有了唯一约束。”
2016-04-10
若要删除数据表user2上的外键,那么就得知道外键约束的名称,怎么查询呢?通过 SHOW CREATE TABLE user2;可以得知,这个外键约束的名字user2_ibfk_1是系统赋予的,那么输入ALTER TABLE user2 DROP FOREIGN KEY user2_ibfk_1;就可以删除数据表user2上的外键。这是老师的原话,以下是我自己想的:要知道数据表上外键约束的名字,就要这样查SHOW CREATE TABLE user2而要知道数据表里某个字段上唯一约束的名字,就输入SHOW INDEXES FROM user2同样是约束,为什么查询的方式不一样呢,我陷入了深思。
2016-04-10
若删除username这个字段上的唯一约束,我们得知道约束的名字是谁。还有我们要清楚删除的是字段上的唯一约束,而并不是这个字段本身。我们首先查看约束的名字,通过SHOW INDEXES FROM user2;看到:key_name:username;这句的意思是在username字段上创建了一个名为username的约束。而其中的key_name中的key是索引。另外,查看字段在不在数据表里用这句:SHOW COLUMNS FROM user2;而查看数据表中约束存不存在的情况用这个:SHOW INDEXES FROM user2; 上面这段话是老师的原话,意思是:唯一约束就是索引??
2016-04-10
删除唯一约束:ALTER TABLE user2 DROP INDEX index_name;为什么这里有索引的名字,原因在于一张表可以有多个唯一约束,一个字段有索引功能,那么这个字段就具有唯一约束。只有指定了索引的名字(也是字段名),才能确定是删除哪个字段的唯一约束。
删除主键约束:ALTER TABLE user2 DROP PRIMARY KEY;因为一个表只有一个字段能有主键约束,所以没必要指定字段名。
查看索引:SHOW INDEXES FROM user2;
删除索引和删除唯一约束是一样的。删除索引:ALTER TABLE user2 DROP INDEX index_name;
删除主键约束:ALTER TABLE user2 DROP PRIMARY KEY;因为一个表只有一个字段能有主键约束,所以没必要指定字段名。
查看索引:SHOW INDEXES FROM user2;
删除索引和删除唯一约束是一样的。删除索引:ALTER TABLE user2 DROP INDEX index_name;
2016-04-10
老师 纠正一一个错误 你没发现自己每次在以网格形式呈现的时候都会出现一个ERROR:
No query specified吗? 因为在\G后面是不需要加;的哈哈
No query specified吗? 因为在\G后面是不需要加;的哈哈
2016-04-09
添加外键约束:ALTER TABLE users2 ADD FOREIGN KEY(pid) REFERENCES provinces (id);
添加默认约束:ALTER TABLE users2 ALTER age SET DEFAULT 15;
删除默认约束:ALTER TABLE users2 ALTER age DROP DEFAULT;
数据表的修改操作:无非就是添加列,删除列,添加约束,删除约束。用的是ALTER,而INSERT是对数据表添加插入记录用的。
添加默认约束:ALTER TABLE users2 ALTER age SET DEFAULT 15;
删除默认约束:ALTER TABLE users2 ALTER age DROP DEFAULT;
数据表的修改操作:无非就是添加列,删除列,添加约束,删除约束。用的是ALTER,而INSERT是对数据表添加插入记录用的。
2016-04-09
添加单列:ALTER TABLE users2 ADD age TINYINT UNSIGNED NOT NULL;
添加多列: ALTER TABLE users2 ADD (col_name column_definition,...);
删除列:ALTER TABLE users2 DROP age;
添加主键约束:ALTER TABLE users2 ADD CONSTRAINT PK_users2_id PRIMARY KEY (id);
添加唯一约束:ALTER TABLE users2 ADD UNIQUE (username);
添加多列: ALTER TABLE users2 ADD (col_name column_definition,...);
删除列:ALTER TABLE users2 DROP age;
添加主键约束:ALTER TABLE users2 ADD CONSTRAINT PK_users2_id PRIMARY KEY (id);
添加唯一约束:ALTER TABLE users2 ADD UNIQUE (username);
2016-04-09
创建数据表:CREATE TABLE [IF NOT EXISTS] table_name(
column_name data_type,
...
);
column_name data_type,
...
);
2016-04-09
显示索引:SHOW INDEXES FROM province;SHOW INDEXES FROM province\G;(以网格呈现)
打开数据表test:USE test;
查看创建命令:SHOW CREATE TABLE province;
查看数据表结构:SHOW COLUMNS FROM tb3;
插入记录:INSERT [INTO] tb1_name [(col_name,...)] VALUES (val,...);
查看数据表列表:SHOW TABLES [FROM db_name] [LIKE 'pattern'|WHERE expr];
打开数据表test:USE test;
查看创建命令:SHOW CREATE TABLE province;
查看数据表结构:SHOW COLUMNS FROM tb3;
插入记录:INSERT [INTO] tb1_name [(col_name,...)] VALUES (val,...);
查看数据表列表:SHOW TABLES [FROM db_name] [LIKE 'pattern'|WHERE expr];
2016-04-09
删除列:ALTER TABLE tb1_name DROP[COLUMN] col_name;
添加多列:ALTER TABLE tb1_name ADD[COLUMN] (col_name column_definition,...);
添加单列:ALTER TABLE tb!_name ADD[COLUMN] col_name column_definition [FIRST|AFTER col_name];
删除记录:DELETE FROM province WHERE id=3;
验证表中是否有相应的记录:SELECT * FROM province;
添加多列:ALTER TABLE tb1_name ADD[COLUMN] (col_name column_definition,...);
添加单列:ALTER TABLE tb!_name ADD[COLUMN] col_name column_definition [FIRST|AFTER col_name];
删除记录:DELETE FROM province WHERE id=3;
验证表中是否有相应的记录:SELECT * FROM province;
2016-04-09
对于一个列所创建的约束,称之为列级约束,而对于两个或两个以上的列所创建的约束,我们称之为表级约束,列级约束在使用的时候,既可以在列定义的时候声明,也可以在列定义以后声明,而表级的约束只能在列定义以后来声明,在实际开发中,用列级约束比较多,表级约束很少用,除此之外,在所有的约束中,并不是说每种约束都存在着表级或列级约束,其中,NOT NULL 非空约束,DEFAULT约束这两种约束就不存在表级约束,它们只有列级约束,而对于其他的三种,像主键,唯一,外键,它们都可以存在表级和列级约束。
2016-04-09
在外键约束当中,在实际的开发过程中,我们很少使用物理的外键约束,很多都去使用逻辑的外键约束,因为物理的外键约束只有INNODB这种引擎才会支持,像我们另外的一种引擎MYISAM的引擎则不支持,反过来说,如果我想创建的数据表,假设存储引擎为MYISAM,而且又想使用外键约束的话,其实是不可能实现的,所以说,我们在实际的项目开发中,我们不去定义物理的外键,所谓的逻辑外键指的是就是我们在定义两张表的结构的时候,我们是按照存在的某种结构的方式去定义,但是不去使用FOREIGN KEY这个关键词来定义。
2016-04-09