MySQL常用指令

登陆

mysql -u root -p[pwd]

登出

\q

创建数据库

create database testdb;

查询数据库

show database;

删除数据库

drop database testdb;

选择数据库

use testdb;

数据类型
  • 数值类型:int bigint float double decimal(小数值)
  • 日期类型:date(日期值) time(时间值) year(年份) datetime(混合日期) timestamp(混合日期,时间戳)
  • 字符串类型:char(定长字符串) varchar(可变字符串) text(长文本数据)
创建表

create table if not exists table_name (
id int UNSIGNED AUTO_INCREMENT,
name varchar(50),
userId int,
foreign key(userId) references table_name2(userId)
);

查询数据库下的所有表

show tables;

查询表结构

desc table_name;

删除表

drop table table_name;

插入数据

insert into table_name(id, name) values(1, ‘dkangel’);

查询数据

select id, name from table_name where name=‘xx’ and id=1;

修改数据

update table_name set id=2, name=‘xx’ where name=‘yy’;

删除数据

delete from table_name where id=1;

模糊搜索

select * from table_name where name like ‘%xx%’;

查询不同表的相同列

select name from table1 where conditions
union / union all(包含重复数据)
select name from table2 where conditions;

排序

select id, name from table_name order by id asc(desc), name asc(默认升序);

分组

select name, count(*) as count from table_name group by name with rollup(再统计);

连接 join
  • inner join 等值连接,公共部分

    select a.name, b.age from table1 a inner join table2 b on a.id = b.id;
    相当于:select a.name, b.age from table1 a, table2 b where a.id = b.id;

  • left join 已左边为主

    select a.name, b.telephone from table1 a left join table2 b on a.id = b.id;

  • right join 已右边为主

    select a.name, b.telephone from table1 a right join table2 b on a.id = b.id;

null 值

select * from table1 where telephone is null (is not null);

正则 regexp

select * from table1 where name regexp ‘^dkangel’

事物

ACID

  • 用 BEGIN, ROLLBACK, COMMIT来实现
    • BEGIN 开始一个事务
    • ROLLBACK 事务回滚
    • COMMIT 事务确认
  • 直接用 SET 来改变 MySQL 的自动提交模式:
    • SET AUTOCOMMIT=0 禁止自动提交
    • SET AUTOCOMMIT=1 开启自动提交
查看表结构

desc table_name;
show columns from user;

修改表结构
  • 字段

    • 添加字段

    alter table table_name add addr varchar(50);

    • 删除字段

    alter table table_name drop addr;

    • 修改字段

    alter table table_name modify addr varchar(100);

  • 默认值

    • 修改字段默认值

    alter table table_name alter addr set default ‘xx’;

    • 删除

    alter table _table_name alter addr drop default;

  • 表名

    alter table table_name rename to table_name_new;

索引
  • 一般应用在SQL查询语句的条件(一般作为where子句的条件)

  • 适用场景:查多改少,索引存在索引表里,该表保存了主键和索引字段并指向实体表的记录,更新索引字段时需要同步更新索引表中的数据

  • 创建索引(唯一索引unique)

    • 直接添加

    create unique index index_name on table_name(column1, column2);

    • 修改表结构添加

    alter table table_name add unique index_name(c1);

    • 创建表时添加

    create table table_name(name varchar(50), unique index index_name(name));

  • 查询索引

    show index on table_name;

  • 删除索引

    drop index index_name from table_name;
    alter table table_name drop index index_name;

临时表

create temporary table table_name(…);

复制表

获取数据表的完整结构

  • show create table table_name \G;
  • inset into clone_table(name, age) select name, age from table_name;
元数据
  • SELECT VERSION( ) 服务器版本信息
  • SELECT DATABASE( ) 当前数据库名 (或者返回空)
  • SELECT USER( ) 当前用户名
  • SHOW STATUS 服务器状态
  • SHOW VARIABLES 服务器配置变量
序列号

auto_increment

处理重复数据

唯一约束

  • primary key
  • ALTER TABLE table_name ADD UNIQUE (column1)
  • select distinct col1, col2 from table_name;
常用函数

select max(column_name) from table_name;
select min(column_name) from table_name;
select avg(column_name) from table_name;

导出数据

select * from table_name into outfile ‘D:\xx
\data.txt’;

  • 报错

ERROR 1290 (HY000): The MySQL server is running with the --secure-file-priv option so it cannot execute this statement

  • 查看当前值

show global variables like ‘%secure_file_priv%’;

  • 解决:my.ini文件里添加如下配置,重启

secure_file_priv=’’

secure_file_priv

用于限制LOAD DATA, SELECT …OUTFILE, LOAD_FILE()传到哪个指定目录

  • secure_file_priv 为 NULL 时,表示限制mysqld不允许导入或导出。
  • secure_file_priv 为 /tmp 时,表示限制mysqld只能在/tmp目录中执行导入导出,其他目录不能执行。
  • secure_file_priv 没有值时,表示不限制mysqld在任意目录的导入导出
导出SQL格式数据

mysqldump -u root -p database_name table_name > ‘tmp.txt’

导入数据
  • mysql命令导入

    mysql -u用户名 -p密码 < 要导入的数据库数据(runoob.sql)

  • source命令导入

    mysql> create database abc;
    mysql> use abc;
    mysql> set names utf8; # 设置编码
    mysql> source /home/abc/abc.sql # 导入备份数据库

  • load data 导入

    load data local infile ‘tmp.txt’ into table table_name(a, b, c);

  • mysqlimport 导入

    mysqlimport -u root -p --local database_name dump.txt

运算符

算数运算符
+ - * / div 商 mod 取余

比较运算符
= != < > <= >= between not between
in not in like regexp is null
is not null

逻辑运算符
not and or xor 异或

位运算符
& 按位与 | 按位或 ^ 按位异或 ! 取反 <<左移 >> 右移

你可能感兴趣的:(数据库)