天天看点

Mysql使用笔记1.mysql常用命令集合

【创建表时设置自增长,并设置起始值】

create table cc(id int auto_increment,name varchar(20),primary key(id)) auto_increment=1000;

【设置已有字段自增长】

alter table test MODIFY id INT UNSIGNED AUTO_INCREMENT;

【自增长的修改】

alter table test auto_increment=10; 注意只能改的比当前的值大,不可以改的比当前小

【自增长字段溢出】

设置自动增长的列,只能是int类型(包含了各种int),当出现了溢出就可以改成bigint 但是如果有外键约束,可能就会更改失败,还不如删库重建,实在太大了就删约束再建约束

alter table 表名 add constraint (PK_表名) primary key (j,k,l); 关于一些约束条件constraint好像没有起到作用比如 check

rename table table1 to table2; 切记不可随便修改表名,改了就要修改相应的 外键,触发器,函数,存储过程!!!

delimiter 任意字符除了转义字符:\

create table temp as select * from test;

show processlist 如果是普通用户,只能查看自己当前的连接状态

show table status like ‘assitant’ 可以看到当前自动增长的id当前值 dev.mysql.com/downloads/mysql/#downloads

NOW()函数以 ‘YYYY-MM-DD HH:MM:SS’ 返回当前的日期时间,可以直接存到DATETIME 字 段中。

CURDATE()以’YYYY-MM-DD’的格式返回今天的日期,可以直接存到DATE字段中。

CURTIME()以’HH:MM:SS’的格式返回当前的时间,可以直接存到TIME字段中。

例:insert into tablename (fieldname) values (now())

insert into data values (‘Myth’,’4’,’2016-03-10’,curtime());//年月日,时间

select datediff(curdate(), date_sub(curdate(), interval i month));

问题:假设当前是5月19 且(提前月份)i=1 就是计算从4月19到今天的天数

解答:

DATETIME、DATE 和 TIMESTAMP 区别:

- DATETIME 类型可用于需要同时包含日期和时间信息的值。MySQL 以 ‘YYYY-MM-DD HH:MM:SS’ 格式检索与显示 DATETIME 类型。

- 支持的范围是 ‘1000-01-01 00:00:00’ 到 ‘9999-12-31 23:59:59’。

- (“支持”的含义是,尽管更早的值可能工作,但不能保证他们均可以。)

- DATE 类型可用于需要一个日期值而不需要时间部分时。MySQL 以 ‘YYYY-MM-DD’ 格式检索与显示 DATE 值。

- 支持的范围是 ‘1000-01-01’ 到 ‘9999-12-31’。

TIMESTAMP 列类型提供了一种类型,通过它你可以以当前操作的日期和时间自动地标记 Insert 或Update 操作。

如果一张表中有多个 TIMESTAMP 列,只有第一个被自动更新。

“完整”TIMESTAMP格式是14位,但TIMESTAMP列也可以用更短的显示尺寸创造 最常见的显示尺寸是6、8、12、和14。 你可以在创建表时指定一个任意的显示尺寸,但是定义列长为0或比14大均会被强制定义为列长14 列长在从1~13范围的奇数值尺寸均被强制为下一个更大的偶数。 列如: 定义字段长度 强制字段长度 TIMESTAMP(0) -> TIMESTAMP(14) TIMESTAMP(15)-> TIMESTAMP(14) TIMESTAMP(1) -> TIMESTAMP(2) TIMESTAMP(5) -> TIMESTAMP(6) 所有的TIMESTAMP列都有同样的存储大小, 使用被指定的时期时间值的完整精度(14位)存储合法的值不考虑显示尺寸。 不合法的日期,将会被强制为0存储

自动更新第一个 TIMESTAMP 列在下列任何条件下发生:

列值没有明确地在一个 Insert 或 LOAD DATA INFILE 语句中被指定。

列值没有明确地在一个 Update 语句中被指定,并且其它的一些列值已发生改变。(注意,当一个 Update 设置一个列值为它原有值时,这将不会引起 TIMESTAMP 列的更新,因为,如果你设置一个列值为它当前值时,MySQL 为了效率为忽略更新。)

明确地以 NULL 设置 TIMESTAMP 列。

第一个列以外其它 TIMESTAMP 列,可以设置到当前的日期和时间,只要将该列赋值 NULL 或 NOW()。

任何 TIMESTAMP 列均可以被设置一个不同于当前操作日期与时间的值,这通过为该列明确指定一个你所期望的值来实现。这也适用于第一个 TIMESTAMP 列。这个选择性是很有用的,举例来说,当你希望 TIMESTAMP 列保存该记录行被新添加时的当前的日期和时间,但该值不再发生改变,无论以后是否对该记录行进行过更新:

当该记录行被建立时,让 MySQL 设置该列值。这将初始化该列为当前日期和时间。

以后当你对该记录行的其它列执行更新时,为 TIMESTAMP 列值明确地指定为它原来的值。

另一方面,你可能发现更容易的方法,使用 DATETIME 列,当新建记录行时以 NOW() 初始化该列,以后在对该记录行进行更新时不再处理它。

alter table <code>Bookinfo</code> add constraint <code>F_N</code> foreign key <code>F_N</code>(<code>classno</code>) references <code>Bookclass</code>(<code>classno</code>) on delete cascade on update cascade;

加了@ 的是用户变量, 限定当前用户,当前客户端, 在declare中声明的参数可以不加 @,那就是是局部变量

例如:declare a int ; 也可以直接就用不用声明,作为临时变量 例如这两种写法:

set @name = expr;

select @name:= expr;

注意:MySQL中只有基本数据类型,没有Oracle中那个绑定类型:表类型或行类型,所以处理起来有点。。不如Oracle方便,不管是触发器还是存储过程

set @a= select * from User;执行这句话就会报出 operand should contain 1 column(s)错误,就是说多值赋值的错误

CREATE TRIGGER ins_sum BEFORE INSERT ON account FOR EACH ROW SET @sum = @sum + NEW.amount;

CREATE TRIGGER trigger_name trigger_time trigger_event ON tbl_name FOR EACH ROW trigger_stmt

使用OLD和NEW关键字,能够访问受触发程序影响的行中的列(OLD和NEW不区分大小写)。在INSERT触发程序中,仅能使用NEW.col_name,没有旧行。

在DELETE触发程序中,仅能使用OLD.col_name,没有新行。在UPDATE触发程序中,可以使用OLD.col_name来引用更新前的某一行的列,也能使用NEW.col_name来引用更新后的行中的列。

用OLD命名的列是只读的。你可以引用它,但不能更改它。对于用NEW命名的列,如果具有SELECT权限,可引用它。

在BEFORE触发程序中,如果你具有UPDATE权限,可使用“SET NEW.col_name = value”更改它的值。这意味着,

你可以使用触发程序来更改将要插入到新行中的值,或用于更新行的值。

在BEFORE触发程序中,AUTO_INCREMENT列的NEW值为0,不是实际插入新记录时将自动生成的序列号。

CREATE USER ‘username’@’host’ IDENTIFIED BY ‘password’;

改密: SET PASSWORD FOR ‘username’@’%’ = PASSWORD(“123456”);

删除: drop user ‘username’@’host’

注意: host是比较重要的如果写了localhost就只能本地登录,% 就是任意

GRANT select ON databasename.tablename TO ‘username’@’host’

alter

alter routine

create

create routine

create temporary table

create user

create view

delete

drop

execute

file

index

insert

lock table

process

reload

replication

client

replication slave

select

show databases

show view

shutdown

super

update

usage