MySql之约束与常用函数

46 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第14天,点击查看活动详情

ac6eddc451da81cb037c289d5366d016082431c3.jpg

1.约束

1.非空约束,一定要给值才能插入

  • NOT NULL
CREATE TABLE a(

id INT NOT NULL, //非空约束

sname VARCHAR(20)

)

  // 提示错误:Field 'id' doesn't have a default value 

2.唯一性约束,值不能重复

CREATE TABLE b(

id INT not NULL UNIQUE

)

3.默认约束,给一个默认值

CREATE TABLE c(

id INT not NULL DEFAULT 6,

sname VARCHAR(3)
)

4.主键约束,主键列自动增长,无需赋值,表格必须要有一个主键一张表中最多只有一个主键


CREATE TABLE t_stu(

sid INT PRIMARY KEY auto_increment, // 主键自增

sname VARCHAR(10) NOT NULL,

sgender char(1),

score FLOAT(4,1) NOT NULL,

birthday TIMESTAMP,

sutid VARCHAR(30) UNIQUE

)

5.外键约束

一张表的外键代表着另外一张表的主键,外键的值必须从另外一张表的主键中进行选择

ALTER TABLE t_stu add CONSTRAINT
fk_cid FOREIGN KEY(courseid) 
REFERENCES course(id);

标志列:自增长列

一个表只能有一个标志列

SET auto_increment_increment=2;

// 查看标志列起始和步长

SHOW VARIABLES LIKE '%auto_increment%';

2.常用函数

注意:MySQL中的+就只有运算符的功能;会试图将字符型数值转换为数值型再继续操作,转换失败则转为0;若其中有null则结果为null;字符串可以使用concat函数拼接;

1.字符函数

  •  length(str)得到的是字节个数 utf8中中文是3个字节

  •  concat() 拼接字符串

  •  upper /lower(str)

  •  substr,substring 截取字串 MySQL的索引是从1开始的,截取的是字符长度

  •  trim() 去除前后空格

  •  replace 替换全部符合的

sql中的索引是从1开始的


// 字符串连接

SELECT concat('java','sun','aa');

// length() 字节长度

SELECT length(sname),sname FROM tb_stu;

// 字符长度

SELECT CHAR_LENGTH('java');

// 去除前后空格

SELECT trim(' ja va ');

// 重复指定次数

SELECT repeat('ja',4);

// 字符串替换

SELECT REPLACE('javaoror','or','sun');

// 截取字串

SELECT substring('javasun',5,3);

2.数学函数

  • round()四舍五入
  • ceil()向上取整
  • floor()向下取整
  • truncate()截断
  • mod()取余   

//取绝对值

SELECT abs(-32);

// 向上取最小整数

SELECT ceil(3.2);

// 向下取最大整数

SELECT floor(3.2);

SELECT floor(score),score FROM tb_stu;

// 取余数

SELECT mod(21,3);

// 得到 0-1之间的随机值

SELECT rand();

// 有2位小数的四舍五入值

SELECT round(5.678,2);

// 截断,小数位保持2位

SELECT TRUNCATE(5.67888,2);

3.日期函数

日期 时间

  • now() 返回当前的日期+时间
  • curdate()返回系统日期,不包含时间
  • curtime() 返回当前时间,不包含日期
  • year()年 获取指定的年
  • month() 返回日期的月份部分,范围为0〜12。
  • monthname() 返回日期的月份全名。


// 当前日期,当前时间,日期和时间

SELECT CURDATE(),CURTIME(),now();

// 指定日期是一年中的第几周

SELECT WEEK(now());

// 返回指定日期的年份

SELECT YEAR(now());

// 返回指定时间的小时

SELECT hour(now()),hour(CURTIME());

// 返回date的月份名

SELECT MONTHNAME(now());

4.其他函数

  • version() 版本号
  • user()当前用户

if(exp1,exp2,exp3)如果exp1true,取exp2的值 否则取exp3的值和三元运算符相似

  SELECT VERSION();

   SELECT USER();

   SELECT DATABASE();

   SELECT IF(10>2,'10','2') a;