mysql經常使用命令

數據庫的基本操做

經過mysql客戶端進入mysql後,實際位於全部倉庫以外:
* 選中要操做的數據庫實例
* 操做數據庫實例中的表或其餘實體.
注意: ";"表示一條SQL命令的結束,當命令結束後纔會執行此命令
* 登錄數據庫mysql

  • mysql[-h主機名或者ip] -u帳號 -p密碼

1、庫操做

  • 查詢全部的數據庫實例: show databases;
  • 選中要操做的數據庫實例: use 數據庫實例名;
  • 查詢當前數據庫實例中的全部表: show tables;
  • 查詢數據庫信息[版本,編碼,位置等等]: \s
  • 建立數據庫實例: create database 數據庫實例名;
  • 刪除數據庫實例: drop database [if exists] 數據庫實例名;
  • 查看當前使用的數據庫 select databases();

2、表操做

操做以前應鏈接某個數據庫

  1. 建表:sql

    ​ 命令:create table <表名> ( <字段名> <類型> [,.. <字段名n> <類型n> ]); 數據庫

mysql> create table MyClass(  
> id int(4) not null primary key auto_increment,  
> name char(20) not null,  
> sex int(4) not null default ’′,  
> degree double(16,2));
  1. 獲取表結構:oracle

    ​ 命令:desc 表名,或者show columns from 表名編碼

mysql>DESCRIBE MyClass  
mysql> desc MyClass;  
mysql> show columns from MyClass;
  1. 刪除表:.net

    ​ 命令:drop table <表名> code

mysql> drop table MyClass;
  1. 插入數據:blog

    ​ 命令:insert into <表名> [( <字段名> [,.. <字段名n> ])] values ( 值 )[, ( 值n )] 索引

mysql> insert into MyClass values(1,’Tom’,96.45),(2,’Joan’,82.99), (2,’Wang’, 96.59);
  1. 查詢表中的數據:ip

    ​ 查詢全部行

    ​ 命令:select <字段,字段,...> from < 表名 > where < 表達式 >

mysql> select * from MyClass;

​ 查詢前幾行數據

mysql> select * from MyClass order by id limit 0,2;  
或者
mysql> select * from MyClass limit 0,2;
  1. 修改表中數據

​ 命令:update 表名 set 字段=新值,…where 條件

mysql> update MyClass set name=’Mary’where id=1;
  1. 刪除表中數據

    命令:delete from 表名 where 表達式

mysql> delete from MyClass where id=1;
  1. 在表中增長字段

    命令:alter table 表名 add字段 類型 其餘;

例如:在表MyClass中添加了一個字段passtest,類型爲int(4),默認值爲  
mysql> alter table MyClass add passtest int(4) default ’′
  1. 刪除字段

    命令:alter table 表名 drop column 字段名;

alter table `t1` drop column money;
  1. 更改表名:

    命令:rename table 原表名 to 新表名

例如:在表MyClass名字更改成YouClass  
mysql> rename table MyClass to YouClass;

3、數據類型:

  • 整數: int
  • 小數: float double
  • 字符/字符串:char varchar ,mysql中不區分字符和字符串,字面值能夠用單引號或雙引號包裹
  • 日期: date ,datetime
  • 說 明:
    • char(10) abc 差7個符號,以空格補全 多餘的符號自動捨去 優勢: 讀取快,無需肯定數據長度. 缺點: 可能會浪費內存
    • varchar(10) abc 差7個符號,不會進行自動補全. 多餘的符號自動捨去 優勢: 讀取慢,肯定數據長度. 缺點: 不會浪費內存

4、約束:

爲何約束條件?
統計社區用戶的我的信息: 姓名,性別,年齡,地址
張三---> 張三 你猜 10000 火星
請問以上數據有意義? 對以上數據可以添加到數據庫?

mysql> desc user;
+---------+-------------+------+-----+---------+-------+
| Field   | Type        | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+-------+
| id      | int(11)     | YES  |     | NULL    |       |
| name    | varchar(20) | YES  |     | NULL    |       |
| sex     | char(2)     | YES  |     | NULL    |       |
| age     | int(11)     | YES  |     | NULL    |       |
| address | varchar(50) | YES  |     | NULL    |       |
+---------+-------------+------+-----+---------+-------+
5 rows in set (0.00 sec)

mysql>  insert into user values(1,'張三','你猜',10000,'火星');
Query OK, 1 row affected (0.06 sec)

mysql> select *  from  user;
+------+------+------+-------+---------+
| id   | name | sex  | age   | address |
+------+------+------+-------+---------+
|    1 | 張三 | 你猜 | 10000 | 火星    |
+------+------+------+-------+---------+

爲了方便數據的管理和實現數據的有效性,一般使用約束條件控制用戶操做的數據.

  • mysql含有哪些約束條件?

    主鍵約束 惟一約束 默認約束 非空約束 檢查性約束 外鍵約束
    說明: oracle約束條件類型和使用方式,與mysql徹底相同

  • 主鍵約束:

    • 主鍵: 用於標示表中的數據.[一般要求主鍵字段沒有實際意義,無關緊要]
    • 分類: 普通主鍵 複合主鍵
    • 格式: 字段名 字段類型 primary key
    • 做用: 使用了主鍵約束的字段,字段值非空且惟一.
create table t1(
  id int primary key,
  name varchar(20)
  );
mysql> desc t1;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int(11)     | NO   | PRI | NULL    |       |
| name  | varchar(20) | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+

2 rows in set (0.00 sec)
mysql>   insert into t1 values(1,'AA');
Query OK, 1 row affected (0.05 sec)

mysql> select *  from t1;
+----+------+
| id | name |
+----+------+
|  1 | AA   |
+----+------+
1 row in set (0.00 sec)

mysql>   insert into t1 values(1,'BB');
ERROR 1062 (23000): Duplicate entry '1' for key 'PRIMARY'
  • 惟一約束
    • 格式: 字段名 字段類型 unique
    • 做用: 使用了惟一約束的字段,字段值不能重複[能夠爲空]
drop table if exists t1;
  create table t1(
  id int primary key,
  name varchar(20) unique
  );
 mysql> desc t1;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int(11)     | NO   | PRI | NULL    |       |
| name  | varchar(20) | YES  | UNI | NULL    |       |
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.00 sec)
mysql> insert into t1 values(1,'AA');
Query OK, 1 row affected (0.05 sec)

mysql> select *  from  t1;
+----+------+
| id | name |
+----+------+
|  1 | AA   |
+----+------+
1 row in set (0.00 sec)

mysql> insert into t1 values(2,'AA');
ERROR 1062 (23000): Duplicate entry 'AA' for key 'name'
mysql> insert into t1 values(2,'BB');
Query OK, 1 row affected (0.06 sec)

mysql> select *  from  t1;
+----+------+
| id | name |
+----+------+
|  1 | AA   |
|  2 | BB   |
+----+------+
2 rows in set (0.00 sec)
  • 默認約束
    • 格式: 字段名 字段類型 default '默認值'
    • 做用: 使用了默認約束的字段,當添加數據時未給該字段賦值時,該字段自動使用默認值做爲字段值
drop table if exists t1;
  create table t1(
  id int primary key,
  name varchar(20) unique,
  sex char(2) default '男'
  );

mysql> desc t1;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int(11)     | NO   | PRI | NULL    |       |
| name  | varchar(20) | YES  | UNI | NULL    |       |
| sex   | char(2)     | YES  |     | 男      |       |
+-------+-------------+------+-----+---------+-------+
3 rows in set (0.05 sec)

 
mysql> insert into t1 values(1,'AA','女');
Query OK, 1 row affected (0.05 sec)

mysql> select *  from t1;
+----+------+------+
| id | name | sex  |
+----+------+------+
|  1 | AA   | 女   |
+----+------+------+
1 row in set (0.00 sec)

mysql> insert into t1 values(2,'BB');
ERROR 1136 (21S01): Column count doesn't match value count at row 1
mysql> insert into t1(id,name) values(2,'BB');
Query OK, 1 row affected (0.36 sec)

mysql> select *  from t1;
+----+------+------+
| id | name | sex  |
+----+------+------+
|  1 | AA   | 女   |
|  2 | BB   | 男   |
+----+------+------+
  • 檢查性約束
    • 格式: 字段名 字段類型 check(條件)
    • 做用: 使用了檢查性約束的字段,字段值必須知足相應條件.
    • 注意: mysql中含有檢查性約束,可是不強制執行. oracle中會強制執行.
drop table if exists t1;
  create table t1(
  id int primary key,
  name varchar(20) unique,
  sex char(2) default '男',
  age int check(age>18)
  );

  
 mysql> desc t1;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int(11)     | NO   | PRI | NULL    |       |
| name  | varchar(20) | YES  | UNI | NULL    |       |
| sex   | char(2)     | YES  |     | 男      |       |
| age   | int(11)     | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
4 rows in set (0.02 sec)

mysql> insert into t1 values(1,'AA','男',20);
Query OK, 1 row affected (0.08 sec)

mysql> select *  from t1;
+----+------+------+------+
| id | name | sex  | age  |
+----+------+------+------+
|  1 | AA   | 男   |   20 |
+----+------+------+------+
1 row in set (0.00 sec)

mysql> insert into t1 values(2,'BB','男',9);
Query OK, 1 row affected (0.36 sec)

mysql> select *  from t1;
+----+------+------+------+
| id | name | sex  | age  |
+----+------+------+------+
|  1 | AA   | 男   |   20 |
|  2 | BB   | 男   |    9 |
+----+------+------+------+
2 rows in set (0.00 sec)
  • 非空約束:
    • 格式: 字段名 字段類型 not null
    • 做用: 使用了非空約束的字段,當添加數據時必須設置該字段的值[或者含有默認約束]
drop table if exists t1;
  create table t1(
  id int primary key,
  name varchar(20) unique,
  sex char(2) default '男',
  age int check(age>18),
  address varchar(50) not null
  );

mysql> desc t1;
+---------+-------------+------+-----+---------+-------+
| Field   | Type        | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+-------+
| id      | int(11)     | NO   | PRI | NULL    |       |
| name    | varchar(20) | YES  | UNI | NULL    |       |
| sex     | char(2)     | YES  |     | 男      |       |
| age     | int(11)     | YES  |     | NULL    |       |
| address | varchar(50) | NO   |     | NULL    |       |
+---------+-------------+------+-----+---------+-------+
5 rows in set (0.00 sec)

mysql> insert into t1 values(1,'AA','男',20,'鄭州');
Query OK, 1 row affected (0.05 sec)

mysql> select * from t1;
+----+------+------+------+---------+
| id | name | sex  | age  | address |
+----+------+------+------+---------+
|  1 | AA   | 男   |   20 | 鄭州    |
+----+------+------+------+---------+
1 row in set (0.02 sec)

mysql> insert into t1(id,name,sex,age) values(2,'BB','男',20);
ERROR 1364 (HY000): Field 'address' doesn't have a default value
  • 注意:
    1. 一個表中能夠含有幾個主鍵?
      0或1個
    2. 一個字段能夠含有幾個約束?
      0或多個 格式: 字段名 字段類型 約束1 約束2 好比: name varchar(20) not null unqie

5、練習

  1. 基本練習
編寫一張數據表: 含有ID,部門,姓名,工資.
部門名稱不限,員工姓名不限,工資不限.
1.添加10個員工
2.修改技術部的員工的工資爲5000
3.查詢營銷部員工的姓名和工資
4.因爲經營緣由,公司裁人,將工資高於4500的員工辭去.
5.查詢當前公司的全部信息

create table t1(
    id int(10),
    section varchar(10),
    name varchar(10),
    money int(10)
    );

insert into t1 value(1,"技術部","張三",8000);
insert into t1 value(2,"營銷部","馬三",8000);
update t1 set money=5000 where section="技術部";
select name,money from t1 where section="營銷部";
delete from t1 where money > 4500;
select * from t1;
2. 約束練習
建立一個客戶表,含有這些字段:id(主鍵) name(非空) sex(默認爲不詳) age(25-50) cu_num(惟一,且不能爲空).
添加5個客戶.
查詢全部客戶的信息
因爲打字員的疏忽,錯把cu_num=c1003的性別寫爲男,請改正.
因爲工做關係,客戶c1001逃跑了,請處理.
查詢目前的客戶信息.
     create table kehu(
        id int(10) primary key,
        name varchar(10) not null,
        sex char(4) default '不詳',
        age int(5) check(25<age<50),
        cu_num int(5) unique);

 insert into kehu value(1,"張三","男",18,1);
 insert into kehu value(2,"王三","男",18,2);
 insert into kehu value(3,"李三","男",18,3);
 insert into kehu value(4,"馬三","男",18,4);
 insert into kehu value(5,"呂三","男",18,5);
 select * from kehu;
 update kehu set sex = "女" where cu_num = 3;
 delete from kehu where id = 1;

6、外鍵約束

建立一張學生表,含有id(主鍵,自增加),name(惟一),age(大於18小於60),sex(默認爲男),班級
建立一張班級表,含有id(主鍵,自增加),班名

create table student(
id int primary key auto_increment,
name varchar(20) unique,
age int check(age>18&&age<60),
sex char(2) default '男',
class int 
);
create table class(
id int primary key auto_increment,
classname varchar(20)
);

查詢每一個學生屬於哪一個班?
select name,className from student,class where class=class.id;
新來了一個學生,請班長將學生添加到學生表,請問該學生能夠是哪些班的?
insert into student(name,sex,age,class) values('小三','男',22,5);

  • 什麼是外鍵?主表?從表?外鍵字段?
    • 外鍵約束: 使用了外鍵約束的字段,字段的值不能自行決定,必須引用指定字段的值.
    • 主表: 在數據庫中創建的表格即Table,其中存在主鍵(primary key)用於與其它表相關聯,而且做爲在主表中的惟一性標識。
    • 從表:以主表的主鍵(primary key)值爲外鍵 (Foreign Key)的表,能夠經過外鍵與主表進行關聯查詢。從表與主表經過外鍵進行關聯查詢。
  • 建立外鍵的條件?
    • 外鍵字段和被引用的字段,字段類型必須相同
    • 被引用字段要麼是主鍵,要麼含有惟一約束
    • 若先添加的數據,後添加外鍵約束,必須保證此時外鍵字段的值在被引用字段中都含有.
  • 添加外鍵的方式?
    • 方式1: 建表以後添加外鍵約束:
      alter table 表名 add [constraint 約束匿名] foreign key(外鍵字段) references 主表名(被引用字段);
    • 方式2: 建表時添加外鍵約束
# 字段名 字段類型 約束,
    .....
    [constraint 約束匿名] foreign key(外鍵字段) references 主表名(被引用字段)
    );
mysql> alter table student add foreign key(class) references class(id);
Query OK, 4 rows affected (0.25 sec)
Records: 4  Duplicates: 0  Warnings: 0

mysql> desc student;
+-------+-------------+------+-----+---------+----------------+
| Field | Type        | Null | Key | Default | Extra          |
+-------+-------------+------+-----+---------+----------------+
| id    | int(11)     | NO   | PRI | NULL    | auto_increment |
| name  | varchar(20) | YES  | UNI | NULL    |                |
| age   | int(11)     | YES  |     | NULL    |                |
| sex   | char(2)     | YES  |     | 男      |                |
| class | int(11)     | YES  | MUL | NULL    |                |
+-------+-------------+------+-----+---------+----------------+
  • 添加外鍵的做用?
    • 完整性 統一性
  • 刪除外鍵的方式? MUL殘留問題?
    • 提醒:添加約束的時候,字段一般要加上括號"()",刪除約束的時候,一般不能添加括號"()".
    • 格式: alter table 表名 drop foreign key 外鍵匿名;
    • alter table student drop foreign key student_ibfk_1;
  • 查建表信息: show create table 表名;
  • 刪除索引: alter table 表名 drop index 索引匿名;
  • 刪除表的步驟?
    • 先刪除外鍵約束,而後任意刪除表格
    • 先刪除從表,而後刪除主表.
  • 問題: 一個表中能夠有幾個外鍵?
    多個
  1. mysql的視圖分類?建立、修改、刪除的格式?
    https://blog.csdn.net/moxigandashu/article/details/63254901
相關文章
相關標籤/搜索