• mysql常用语句之DDL:对数据库和表的操作


    一、库操作

    1.创建数据库

    CREATE DATABASE learnMysql
    
    • 1

    2.删除数据库

    DROP DATABASE learnmysql
    
    • 1

    3.选择数据库

    USE learnmysql
    
    • 1
    • use 语句可以通告MySQL把db_name数据库作为默认(当前)数据库使用,用于后续语句。该数据库保持为默认数据库,直到语段的结尾,或者直到出现下一个不同的use语句:
     USE db1;
    SELECT COUNT(*) FROM mytable;   # selects from db1.mytable
    USE db2;
    SELECT COUNT(*) FROM mytable;   # selects from db2.mytable
    
    • 1
    • 2
    • 3
    • 4
    • 使用USE语句为一个特定的当前的数据库做标记,不会阻碍您访问其它数据库中的表。下面的例子可以从db1数据库访问author表,并从db2数据库访问editor表:
    USE db1;
    SELECT author_name,editor_name FROM author,db2.editor
    WHERE author.editor_id = db2.editor.editor_id;
    
    • 1
    • 2
    • 3

    use语句被设立出来,用于与Sybase相兼容。

    • 有些网友问到,连接以后怎么退出。其实,不用退出来,use 数据库后,使用show databases就能查询所有数据库,如果想跳到其他数据库,用
     use 其他数据库名字
    
    • 1

    就可以了。

    4.查询数据库

    SHOW DATABASES
    
    • 1

    5.修改数据库

    比如数据库名称old_db想改名为new_db

    MySQL修改数据库名称比较麻烦,不支持直接修改,需要通过其它方式间接达到修改数据库名称的目的。
    在 MySQL 5.1.23 之前的旧版本中,我们可以使用 RENAME DATABASE 来重命名数据库,但此后版本,因为安全考虑,删掉了这一条命令。

    方法一:先导出数据,再导入数据

    当数据库体积比较小时,最快的方法是使用mysqldump命令来创建整个数据库的转存副本,然后新建数据库,再把副本导入到新数据库中。

    方法二:通过修改表名称,间接实现修改数据库名称

    使用此方法实际上将所有表从一个数据库移动到另一个数据库,这实际上重命名了该数据库(MySQL没有单个语句的操作),移动后原始数据库继续存在,但是里面没有表。

    • 使用RENAME TABLE命令修改表名,将表移动到新的库里:
    rename table old_db.tb to new_db.tb;
    
    • 1

    2.4 如何使用shell脚本来批量修改表名:

    当库下表比较多的时候,用上面方法纯手动也不现实,好在linux下可以用shell脚本来批处理。
    附上一个shell脚本批量修改表名称。

    #!/bin/bash
    mysql -uroot -p123456 -e ‘create database if not exists new_db;’
    list_table=$(mysql -uroot -p123456 -Nse “select table_name from information_schema.TABLES where TABLE_SCHEMA=‘old_db’”)
    for table in l i s t t a b l e d o m y s q l − u r o o t − p 123456 − e " r e n a m e t a b l e o l d d b . list_table do mysql -uroot -p123456 -e "rename table old_db. listtabledomysqlurootp123456e"renametableolddb.table to new_db.$table"
    done

    mysql登陆命令行参数

    -e, —execute=name # 执行mysql的sql语句
    -N, —skip-column-names # 不显示列信息
    -s, —silent # 一行一行输出,中间有tab分隔
    方案一:

    备份db1里的t7表

    [root@stu1 mysql]# mysqldump -u root -p123 db1 t7 > t7.sql

    恢复db1里的t7表
    [root@stu1 mysql]# mysql -u root -p123 db1 < t7.sql

    方案二:

    create table fund_netvalue_bak_2013_11_08 as select * from fund_netvalue

    配餐:

    备份db1里面的tb1和tb2的表
    [root@stu12 mysql]# mysqldump db1 tb1 tb2 -u root -p123 > biao.sql

    方案三:

    SQL SELECT INTO 实例 - 制作备份复件
    下面的例子会制作 “Persons” 表的备份复件:

    SELECT
    *
    INTO
    Persons_backup
    FROM Persons
    IN 子句可用于向另一个数据库中拷贝表:

    SELECT
    *
    INTO
    Persons
    IN
    ‘Backup.mdb’
    FROM Persons
    如果我们希望拷贝某些域,可以在 SELECT 语句后列出这些域:

    SELECT
    LastName,FirstName
    INTO
    Persons_backup
    FROM Persons
    SQL SELECT INTO 实例 - 被连接的表
    从一个以上的表中选取数据也是可以做到的。

    下面的例子会创建一个名为 “Persons_Order_Backup” 的新表,其中包含了从 Persons 和 Orders 两个表中取得的信息:

    SELECT
    Persons.LastName,Orders.OrderNo
    INTO
    Persons_Order_Backup
    FROM
    Persons
    INNER JOIN
    Orders
    ON
    Persons.Id_P=Orders.Id_P

    方案四:

    INSERT INTO SELECT语句
    语句形式为:Insert into Table2(field1,field2,…) select value1,value2,… from Table1
    要求目标表Table2必须存在

    二、表操作

    1. 创建表

    创建新表

    create table tabname(
    字段名1 类型,
    字段名2 类型,
    字段名3 类型,…);
    例:

    CREATE TABLE student(
    stu_id INT AUTO_INCREMENT  PRIMARY KEY,
    stu_name VARCHAR(10),
    stu_sex VARCHAR(1),
    stu_age INT,
    stu_class VARCHAR(20));
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    其中 AUTO_INCREMENT 表示该字段自增;PRIMARY KEY表示该字段为主键
    创建表后设置自增初始值,不能创建的同时设置自增值

    alter table student AUTO_INCREMENT =1
    
    • 1

    根据已有的表创建新表

    • 使用旧表创建新表,两个表结构一样
    create table 新表名 like 旧表名
    
    • 1
    • 从旧表中选取几列创建新表
    create table 新表名 as select 列名1,列名2… from 旧表名 
    
    • 1

    2. 删除表

    drop table tabname
    
    • 1

    3. 显示表的属性信息

    desc 表名
    
    • 1

    4. 修改表

    增加一列

    1. 在表最后增加一列
    alter table 表名 add 列名 类型
    
    • 1
    1. 指定列名后面添加列名
    alter table 表名 add 列名 类型 after 已有列名
    
    • 1
    1. 插入首列
    alter table 表名 add 列名 类型 first
    
    • 1

    删除一列

    alter table 表名 drop 列名
    
    • 1

    修改列

    • 修改一个列名
    alter table 表名 change 旧列名 新列名 类型
    
    • 1
    • 修改类型
    alter table 表名 modify 列名(已有) 新的类型
    
    • 1
    • 添加主键(一个表只能有一个主键)
    Alter table 表名 add primary key(列名)
    
    • 1
    • 删除主键
    Alter table 表名 drop primary key
    
    • 1

    13.添加外键----本表字段类型和外键的字段类型必须一致才能添加,例如都是int 或都是char
    alter table 表名 add foreign key(列名) references 表名(主键)
    删除外键:需要找到外键特有的名称

    14.约束类型

    关键字说明
    not null非空约束
    unique唯一约束
    primary key主键
    foreign key外键
    auto_increment自增长
    default设置默认值 例:default ‘值’
  • 相关阅读:
    数据文件采用错误方式删除后的解决办法
    鸿蒙tabbar ArkTS
    【Ubuntu on windows】Package ‘xxxx‘ has no installation candidate
    关于笔试编程题被坑的输入问题,acm模式下的python输入究竟如何写?
    0913(051天 网络编程01 Socket+URL)
    负载均衡--Haproxy
    核心实验13合集_vlan mapping 和QinQ_ENSP
    我的Go+语言初体验——Go+语言构建神经网络实战手写数字识别
    springboot+教学工作量管理系统 毕业设计-附源码221541
    一篇文章带你了解轻量级Web服务器——Nginx简单入门
  • 原文地址:https://blog.csdn.net/qq_15125937/article/details/125489588