Skip to content
目录
sql
mysql -u root -p --user=userauth  #登录

mysql -u root -p
root@localhost: RhtpXh,)-5B4
 
1、显示数据库列表。 
show databases; 
2、显示库中的数据表: 
use mysql;
show tables; 
3、显示数据表的结构: 
describe 表名; 
4、建库: 
create database 库名
5、建表: 
use 库名; 
create table 表名 (字段设定列表); 
6、删库和删表: 
drop database 库名; 
drop table 表名; 
7、将表中记录清空: 
delete from 表名; 
8、显示表中的记录: 
select * from 表名
9.变量
set @varA = 3;
select @varA;

注意语句的结尾有个 ";" 
DROP DATABASE IF EXISTS sampledb;
CREATE DATABASE sampledb DEFAULT CHARACTER SET utf8;
USE sampledb;

ENGINE=InnoDB;//该类型表支持事务,默认是MyISAM引擎

source C:\sqlfile.sql //运行脚本

SELECT RAND()*2-1	//-1到0的随机数,原理:原区间(01)减1变成(-1,1)
floor()取整

UPDATE `gis_geo_server_layer` SET `server_id`=13 WHERE `id`=154;
UPDATE `` SET `人数`=`人数`+1 WHERE `单位号`=5	//更新,人数=原来的人数+1
UPDATE `` SET `人数`=1 FROM  表1JOIN 表2 ON 表1.ID=表2.ID WHERE `单号`=5   GROUP BYHAVING 聚集函数//连接其他表更新,根据列分组
HAVING可以使用聚集函数,WHERE不可用      
DELETE FROM `` WHERE 用户号=1
WHERE 性别=ANY(	)  性别是...  
WHERE 名字 LIKE '通配符'           

让MySQL自增长字段号从不连续变成连续的:删掉列,重新建列(不推荐,多表容易不同步)
ALTER TABLE `user` DROP 求职者编号;
ALTER TABLE `user` ADD 求职者编号 INT NOT NULL PRIMARY KEY AUTO_INCREMENT FIRST;

解决多表自增id不连续,不同步:插入时用户号当前最大值+1(推荐)
INSERT INTO `普通用户表`(用户号,用户名,密码) VALUES(
(SELECT `aaa` FROM(SELECT MAX(用户号)+1 AS aaa FROM `普通用户表`)b)
,333,333);
解决了[Err] 1093 - You can't specify target table '普通用户表' for update in FROM clause
总结:取消自增,改为用int或BigInt,每次获取到最大,然后+1,对应字段的值。

谁是多方谁就放一个外键:	外键作用就是必须我有你才能有,我没有的你不能有

使用varchar,代替char,这是因为varchar会动态分配长度
char指定为20,即时你存储字符“1”,它依然是20的长度

外键类型
 No action方式如果子表中有匹配的记录,则不允许对父表对应候选键进行update/delete操作
 Restrict方式同no action, 都是立即检查外键约束




与一方同步用级联:一对多,多方多个外键;		外键的模式设为级联,就可与一方同步
只能是删除,更新同步,插入无法同步 	也就是我删你也删,我更新你也更新

性别男女的约束
ALTER TABLE `用户表`  DROP 性别;//删掉
ALTER TABLE `用户表` ADD 性别 enum('','') not NULL;//重建,枚举类型

两个字段(外键)联合约束: 索引类型选用 唯一索引unique
ALTER TABLE `表名` ADD unique(用户号,职业号) 给一个表建唯一约束    
    用户号 职业号
       1 2
       1 2


触发器:在此表[更新]之前(Before) ,运行定义的IF语句


注意: mysql不支持check约束,但可以使用check约束,而没有任何效果
解决方案:用Before触发器,在更新前用if检查,不符合条件就设回原值 
CREATE TRIGGER TEST BEFORE INSERT ON TB1
FOR EACH NOW
BEGIN
    IF TB2.A < 0 THEN
        SET TB2.A=0;
    END IF;
END
本站总访问量 次 本站访客数 人次

1111111111111111111