references user(id);
)
//创建一个表,名字叫fk_test,有几个字段.其中有一个叫:user_id的.我们创建一个关联规则:my_user_fk_test_fk
它的内容是:将user_id这个字段设为外建,并且关联到user表的id字段上.这样关联后,当我们向fk_test表插入数据的时候,user_id字段里的内容就必须在user表id字段里存在.而且当你更改或删除user表里的那个已与fk_test表关联的记录的时候会报错,这就是添加外键规则的好处.当然你也可以不加constraint.
加唯一约束:
CREATE TABLE Persons
(
Id_P int NOT NULL,
Name varchar(255) NOT NULL,
CONSTRAINT uc_PersonID UNIQUE (Id_P,Name)
//添加约束,并给约束命名:uc_PersonID
)或
CREATE TABLE Persons
(
Id_P int NOT NULL UNIQUE,
Name varchar(255) NOT NULL
)
删除约束:
MySQL:
ALTER TABLE Persons DROP INDEX uc_PersonID
SQL Server / Oracle / MS Access:
ALTER TABLE Persons
DROP CONSTRAINT uc_PersonID
上面是针对已经命名的约束,如果没有命名,则可以用change column命令.
删除相同的数据.
delete RT_MEETING_USER
from RT_MEETING_USER tt
where exists(
select *
from RT_MEETING_USER
where NPC_MEETING_ID=tt.NPC_MEETING_ID
and MEETING_USER_ID=tt.MEETING_USER_ID
and ID
查询重复数据:
SELECT SERI_NUM FROM t_sms_pay GROUP BY SERI_NUM HAVING
count(SERI_NUM) > 1;
mysql longtext 最大可存放 2 的 32 次方 减 1
个字符。但不是说小于这个长度的一定就存的进去。这和 mysql 配置有关,在命令行中输入:
show VARIABLES like '%max_allowed_packet%';
可以看到允许存放的最大长度。
可以通过如下方式改变:
set global max_allowed_packet = 2*1024*1024*10;
设置后,必须断开当前 mysql 连接,然后重新再连接,再查看上面的变量。就会看到变化。
创建索引或复合索引:
CREATE INDEX index_name ON table_name (column_name, column_name2);
deop
index index_name on table_name;
查看当前存储过程:
show procedure status;
查看某个存储过程:
show create procedure proc_name;
给字段设置随机值:
值的范围: [1, 6]
update user set type = ceiling(rand()*6);
清空表数据:
truncate table xxx
和 delete from 相比。它更快。而且如果有 auto increment ,delete 后字段值是不会清零的。truncate
会清零。
将表转换成 MyISAM类型
alter table t_test type = myisam;
加上序号列:
SELECT
@rownum:=@rownum + 1 AS rownum, message.* FROM (SELECT @rownum:=0)
r, message order by mesId desc
多表连接更新:
UPDATE t_keywords
INNER JOIN t_long_tail ON t_keywords.keyword=t_long_tail.name SET
t_keywords.weight=t_long_tail.weight