基本sql数据语句
mysql -uroot(用户名) -p <表名>
show databases;
use ***(库名);
show tables;
desc 表名;
quit; 退出sql
inser into 表名 (列值)values (各列对应的值);
update 表名 set 列名1=列值1,列名2=列值2 where 查询条件;
delete from 表名 where 查询条件;
drop table 表名;
sql自建函数:now():返回当前日期和时间
select now();
sql数据类型
字符型数据:
定长:char(20) /最大长度255个字节,长度不足,则使用空格向右填充/
不定长:varchar(20) /最大长度65535个字节/
文本类型及其最大长度:tinytext,255;text,65535;mediumtext,16777215;longtext,4294967295
查看服务器支持的字符集:show character set;
可以为列设置支持的字符集:…varchar(20) character set utf-8;
可设计整个库的默认字符集:create database ** character utf-8;
- 在mysql中查看当前遇到字符长度异常会如何处理(strict模式则会抛出异常;ansi模式会默认截断):
select @@session.sql_mode;set sql_mode='ansi'
- 由于sql使用单引号分隔字符串,所以要注意验证入参带‘,和出参带’的情况(可以使用自建函数
quote(列名)
)。 - 生成特殊字符:
根据字符串查找对应ascii码:select ASCII('?');
根据字符集编号返回字符:select char(158);
.
字符拼接select concat('aaa','b',char(148));
- 操作字符串:
1、返回字符串长度:select length(列名) from favorite_food;
2、 返回匹配的字符串起始位置:select position('oo' in 列名) from favorite_food;
,ps:positon()返回0表示未匹配到;sql中字符串的第1个字符从1开始;
locate
(‘字符串’,要匹配的列名,指定从第n的位置开始匹配);
3、比较字符串:
比较位置先后顺序select strcmp('pizza','noodles');
相当于先后找到前后者的参数位置后,相减,如果负数,则改公式就返回-1(表明前者靠前);同样还会返回0/1。
比较是否匹配:select food like '%a' from favorite_food;
如果没有自定义列名,food like '%a’会成为临时表的列名,1表符合,0表不符合,null表无法比较因为无值。1???如果是列是数值型数据呢???同样regexp也可以使用上。
4、selectinsert(
‘原始字符串’,字符串开始操作的位置,需要替换的字符串数if值为0表明替换字符串会将插入其中,‘要替换的字符串’) ;
数值型数据:
整数类型、浮点类型(可定义为无符号型unsigned)
内建函数:取余:mod(x,y)
;求幂:pow(x,y)
;向上/下截取整型数字:cell(x)
,floor(x)
;四舍五入:round(
被操作的数,保留小数点数),第2位如果是负数,表明将取整多少位select round(15.0001,-1);返回20
;如果x是正数返回1,0返回0,负数返回-1:sign(x)
;绝对值:abs(x)
时间数据:
date;datetime;time
mysql提供了:全局时区&会话社区(for登录用户)select @@global.time_zone,@@session.time_zone;
例子
创建1个表:
> create table person
-> (person_id smallint unsigned,
-> fname varchar(20),
-> lname varchar(20),
-> gender enum('M','F'),
-> birth_date DATE,
-> street varchar(30),
-> city varchar(20),
-> state varchar(20),
-> country varchar(20),
-> postal_code carchar(20),
-> constraint pk_person primary key (person_id));
mysql> desc person;
+-------------+----------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------------+----------------------+------+-----+---------+-------+
| person_id | smallint(5) unsigned | NO | PRI | NULL | |
| fname | varchar(20) | YES | | NULL | |
| lname | varchar(20) | YES | | NULL | |
| gender | enum('M','F') | YES | | NULL | |
| birth_date | date | YES | | NULL | |
| street | varchar(30) | YES | | NULL | |
| city | varchar(20) | YES | | NULL | |
| state | varchar(20) | YES | | NULL | |
| country | varchar(20) | YES | | NULL | |
| postal_code | varchar(20) | YES | | NULL | |
+-------------+----------------------+------+-----+---------+-------+
10 rows in set (0.01 sec)
列解释:第4列显示该列是否作为键值(主键<保证不重复>或外键);第5列显示插入该列数据时忽略该列,是否提供默认值。
修改列信息(但是在有外键使用的时候无法修改,那怎么解决?):
alter table person modify person_id smallint unsigned auto_increment;
继续:
create table favorite_food
(person_id smallint unsigned,
food varchar(20),
constraint pk_favorite_food primary key (person_id,food), *主键包含两列*
constraint fk_fav_food_person_id foreign key (person_id) references person (person_id)); *外键约束:该列值只能来自person表的person_id*
PS:以上均来自于《sql学习指南第2版》
2 ↩︎