• (三)mysql SQL 基本操作


    MySQL服务器对象

    mysql 服务器对象内部分成了 4 层:

    系统(DBMS)---->数据库(DB)---->表(Table)---->字段(Field)


    mysql 的基本操作

    基本操作:CRUD ;

    将SQL的基本操作根据操作对象进行分类,分为三类:库操作,表(字段)操作,数据操作;


    SQL的注释

    • SQL注释
    	mysql> -- 双中划线+空格 ,代表单行注释 ;
    	    -> ;
    	Query OK, 0 rows affected
    	
    	mysql> #单行注释也可使用 #,不需要加空格 ;
    	    -> ;
    	Query OK, 0 rows affected
    

    库操作

    对数据库进行 CRUD ;

    新增数据库语法:create database 数据库名字 [库选项]

    库选项:用来约束数据库,分为两个选项 :

    ① 字符集设定 :charset/character set 具体字符集 ;在中文中常用的字符集有:gbk,utf8 ;用于指定表的字符集 ;
    ②校对集设定:collate 具体校对集(数据比较规则) ,默认校对集是跟着字符集走的;校对集是排序用的!

    SQL 语句演示


    --------------创建数据库-------------------

    数据库名字中不能含有关键字,如果非要使用关键字作名字,则使用 反引号` )括起来

    	--  创建数据库
    	mysql> create database mydatabase_1 charset utf8 ;
    	Query OK, 1 row affected
    	
    	-- 用关键字做作数据库名字,且没有使用反引号括起来,报错
    	mysql> create database database charset utf8;
    	1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL
    	 server version for the right syntax to use near 'database charset utf8' at line 1
    
    	-- 用关键字做作数据库名字,使用反引号括起来,通过
    	mysql> create database `database` charset utf8;
    	Query OK, 1 row affected
    	
    	```
    	数据库是支持中文作为名字的,但是需要先告诉mysql服务器你的字符集,不然它识别不出来中文
    	```sql
    	-- 告诉mysql服务器,我们使用的字符集,不然它识别不出来中文
    	mysql> set names utf8;
    	Query OK, 0 rows affected
    	
    	-- 然后再使用中文作为数据库的名字
    	mysql> create database 中国 charset utf8;
    	Query OK, 1 row affected
    

    --------------小结-------------------

    ① 当执行完创建数据库的sql语句之后,会在数据库系统中,增加对应的数据库信息;

    ② 会在保存数据库的文件夹下面的 data 目录下,创建一个对应数据库名字的文件夹;

    ③ 在该对应文件下,会有一个 opt 文件,里面保存了数据库的库选项 ;



    --------------查看数据库-------------------

    ① 查看所有数据库:show databases ;

    	
    	-- 查看所有数据库
    	mysql> show databases ;
    	+--------------------+
    	| Database           |
    	+--------------------+
    	| information_schema |
    	| database           |
    	| mysql              |
    	| test               |
    	| user               |
    	| 中国               |
    	+--------------------+
    	13 rows in set
    

    ② 查看部分数据库,类似于模糊查询 :show databases like 'pattern' ;

    pattern :是个匹配模式,有2种占位符 :

    % : 代表匹配多个任意字符 ;
    _ : 代表匹配单个任意字符 ;

    但是 _ 也是可以作为数据库名字的,因此要想查询 _ 得使用转义 \_

    	-- _ 代码占位符,因此可以查询出多个数据库
    	mysql> show databases like 'my_%';
    	+-----------------+
    	| Database (my_%) |
    	+-----------------+
    	| mybatisday01    |
    	| mydatabase_1    |
    	| mysql           |
    	+-----------------+
    	3 rows in set
    	
    	-- \_ 代表数据库的名字,因此一个没有查出来,因为我们没有 my_xxx 的数据库 ;
    	mysql> show databases like 'my\_%';
    	Empty set
    

    ③ 查看数据库的创建语句:show create database 数据库名字

    注意,查询出来的时候数据库优化过后的sql语句,因此,和我们创建时候,写的不一样 ;

    	mysql> show create database user ;
    	+----------+---------------------------------------------------------------+
    	| Database | Create Database                                               |
    	+----------+---------------------------------------------------------------+
    	| user     | CREATE DATABASE `user` /*!40100 DEFAULT CHARACTER SET utf8 */ |
    	+----------+---------------------------------------------------------------+
    	1 row in set
    


    --------------更新数据库-------------------

    数据库的名字不可以更改,在低版本的mysql中可以更改,高版本中修改为不可修改!

    语法:alter database 数据库名字 [库选项]

    字符集:charset/character set [=] 字符集
    校对集:collate 校对集

    其中校对集是依赖字符集的,修改字符集,校对集会自动的更改 ;

    	mysql> alter database 中国 charset = gbk ;
    	Query OK, 1 row affected
    


    --------------删除数据库-------------------

    数据库的删除是不可逆操作,,因此,执行删除的时候,需要万分注意 ;

    语法 :drop database 数据库名字 ;

    	mysql> drop database 中国 ;
    	Query OK, 0 rows affected
    

    删除数据库的时候,会将之前创建数据库的时候,产生的文件夹删除掉;


    表(字段)操作


    --------------创建表---------------

    	# 语法:
    	-- 如果不想显式的指明数据库,则使用 use 数据库名字,进入到某个具体的数据库中
    	 create table [if not exists] 数据名.表名( --  显式的指明数据库
    	 字段,
    	 字段  --  最后一个字段后面不需要加 逗号 ,可以看出是方法的最后一个参数
    	  ) [表选项];
    	Query OK, 0 rows affected
    

    if not exists : 起检查作用,如果表不存在,则建立表,表存在,则不建立;

    表选项:
    charset/character set 字符集 ; 指定表中字段内容,也就是数据单元的字符集 ;
    collate 校对集;
    ③ 存储引擎 :engine 具体的存储引擎 ;(常用的有 innodb,myisam

    sql 演示:

    	mysql> use user ;  -- 进入 user 数据库
    	    -> create table student(
    	    -> name varchar(10),
    	    -> age int ,
    	    -> genger varchar(10)
    	    -> ) charset utf8 ;
    	Query OK, 0 rows affected
    

    当上面的sql执行以后,会在对应的数据库中,创建出表,并且在对应的数据库文件夹下面 ,会产生对应的 表的结构文件(跟存储引擎有关);


    --------------查看表---------------

    跟查看数据库,基本别无二致 ;但是多一个查询字段的操作

    sql 演示:

    	# 查询数据库中的所有表
    	mysql> show tables ;
    	+--------------------+
    	| Tables_in_database |
    	+--------------------+
    	| student            |
    	+--------------------+
    	1 row in set
    
    	# 模糊查询,亦可以使用 '%t' ,但是这样会很慢,其中 缘由是这样查,不能使用 索引;
    	mysql> show tables like 'stud%'+----------------------------+
    	| Tables_in_database (stud%) |
    	+----------------------------+
    	| student                    |
    	+----------------------------+
    	1 row in set
    
    	# 查询 表的创建语句,可以使用 g 代替 ; G 表示将查询结果循环 90°
    	mysql> show  create table student ;
    	+---------+----------------------------------------------------------------------------------------------------------------------------------------------------------------+
    	| Table   | Create Table                                                                                                                                                   |
    	+---------+----------------------------------------------------------------------------------------------------------------------------------------------------------------+
    	| student | CREATE TABLE `student` (
    	  `name` varchar(10) default NULL,
    	  `age` int(11) default NULL,
    	  `genger` varchar(10) default NULL
    	) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
    	+---------+----------------------------------------------------------------------------------------------------------------------------------------------------------------+
    	1 row in set
    
    	#查询表中的字段,三种 方法
    	#  desc 表名 ,describe 表名,show columns  from 表名
    	mysql> desc student ;
    	+--------+-------------+------+-----+---------+-------+
    	| Field  | Type        | Null | Key | Default | Extra |
    	+--------+-------------+------+-----+---------+-------+
    	| name   | varchar(10) | YES  |     | NULL    |       |
    	| age    | int(11)     | YES  |     | NULL    |       |
    	| genger | varchar(10) | YES  |     | NULL    |       |
    	+--------+-------------+------+-----+---------+-------+
    	3 rows in set
    	
    	mysql> describe student ;
    	+--------+-------------+------+-----+---------+-------+
    	| Field  | Type        | Null | Key | Default | Extra |
    	+--------+-------------+------+-----+---------+-------+
    	| name   | varchar(10) | YES  |     | NULL    |       |
    	| age    | int(11)     | YES  |     | NULL    |       |
    	| genger | varchar(10) | YES  |     | NULL    |       |
    	+--------+-------------+------+-----+---------+-------+
    	3 rows in set
    	
    	mysql> show  columns  from student ;
    	+--------+-------------+------+-----+---------+-------+
    	| Field  | Type        | Null | Key | Default | Extra |
    	+--------+-------------+------+-----+---------+-------+
    	| name   | varchar(10) | YES  |     | NULL    |       |
    	| age    | int(11)     | YES  |     | NULL    |       |
    	| genger | varchar(10) | YES  |     | NULL    |       |
    	+--------+-------------+------+-----+---------+-------+
    	3 rows in set
    	
    


    --------------修改表---------------

    修改表,分为2部分,一部分是修改 表本身,另一种是修改 表的字段

    sql 演示 :

    ① 修改表本身

    	# 修改表名
    	# 语法:rename table 老表名 to 新表名 ;
    	mysql> rename table student to my_student ;
    	Query OK, 0 rows affected
    	
    	# 修改表选项
    	# 语法:alter table 表名  表选项 [=] 值 ;
    	mysql> alter table my_student charset = gbk ;
    	Query OK, 0 rows affected
    	Records: 0  Duplicates: 0  Warnings: 0
    
    

    ② 修改表的字段

    涉及的操作很多:添加字段 、删除字段、重命名字段、修改字段属性

    sql 演示 :

    	# 新增字段
    	# 语法:alter table 表名 add [column] 字段名 数据类型 [列属性] [位置] ;
    	# 位置,可以放在表中任意位置上; first 表示第一个;after 字段名 ,表示放在某个字段后面 ;
    	# 默认是放在最后一个字段后面 ;
    	 mysql> alter table my_student 
    	     -> add column id int 
    	     -> first ;
    	Query OK, 0 rows affected
    
    	# 修改字段 一般修改是的字段的列属性或者数据类型
    	# 语法:alter table 表名 modify 字段名 数据类型 [列属性] [位置] ;
    	mysql> alter table my_student modify name char(10) ;
    	Query OK, 0 rows affected
    	Records: 0  Duplicates: 0  Warnings: 0
    
    	# 重命名字段
    	# 语法:alter table 表名 change  旧字段名 新字段名 数据类型 [列属性] [位置] ;
    	mysql> alter table my_student change genger sex char(2) first ;
    	Query OK, 0 rows affected
    	Records: 0  Duplicates: 0  Warnings: 0
    
    	# 删除字段
    	# 注意:删除字段,会将该字段列的值全部一并删除,这个操作是不可逆的!!
    	# 语法:alter table 表名 drop 字段名 ;
    	mysql> alter table my_student drop  id ;
    	Query OK, 0 rows affected
    	Records: 0  Duplicates: 0  Warnings: 0
    
    


    --------------删除表---------------

    sql 演示

    	# 删除表,可以一次性删除多张表 ;
    	# 语法:drop table 表名1,表名2 ... ;
    	mysql> drop table my_student ;
    	Query OK, 0 rows affected
    

    删除表以后,创建表时候,在数据库对应的文件夹下面生成的表的约束文件,也一并被删除 ;


    数据操作


    -------------新增数据 ------------

    插入数据,非数值数据使用单引号括起来,其实所有数据都可以使用单引号括起来 ;
    有两种方法:
    ① 给全表字段插入数据,要求插入数据的顺序必须和表字段的顺序一致; (可以一次性插入多条数据)

    # 新增数据,可以一次性插入多条记录
    # 语法:insert into 表名 values(字段值..),(字段值...) ;
    mysql> insert into student values('1','yaz','male'),('2','dog','female');
    Query OK, 2 rows affected
    Records: 2  Duplicates: 0  Warnings: 0
    

    ②给部分字段插入只值,但是插入值的顺序可以更改,根据表名后面的字段的顺序 ;

    # 给部分字段插入值,也可以一次性插入多条记录
    # 语法:insert into 表名(字段..) values(字段值..) ;
    mysql> insert into student(id,name) values('3','nanda');
    Query OK, 1 row affected
    
    # 一次性插入多个值
    mysql> insert into student(id,name) values('3','nanda'),('22','haha');
    Query OK, 2 rows affected
    Records: 2  Duplicates: 0  Warnings: 0
    


    -------------查询数据 ------------

    # 查询所有字段的值
    # 语法:select * from 表名 ;
    mysql> select * from  student ;
    +----+-------+--------+
    | id | name  | sex    |
    +----+-------+--------+
    |  1 | yaz   | male   |
    |  2 | dog   | female |
    |  3 | nanda | NULL   |
    |  3 | nanda | NULL   |
    | 22 | haha  | NULL   |
    +----+-------+--------+
    5 rows in set
    
    # 查询部分字段值
    # 语法:select 字段1,字段2 ... from 表名 ;
    mysql>  select id,name from student ;
    +----+-------+
    | id | name  |
    +----+-------+
    |  1 | yaz   |
    |  2 | dog   |
    |  3 | nanda |
    |  3 | nanda |
    | 22 | haha  |
    +----+-------+
    5 rows in set
    
    # 根据条件查询
    # 语法: select 字段 from 表名where 条件;
    mysql>  select sex,name from student where id = 22;
    +------+------+
    | sex  | name |
    +------+------+
    | NULL | haha |
    +------+------+
    1 row in set
    
    


    -------------更新数据 ------------

    # 按照条件更新
    # 语法:update 表名 set 字段= 字段值 [where 条件] ;
    mysql> update student set sex = 'male' where name = 'dog' ; 
    Query OK, 1 row affected  -- 如果更新失败,则影响的行数为 0 ;
    Rows matched: 1  Changed: 1  Warnings: 0
    
    # 如果更新失败,影响的行数
    mysql> update student set sex = 'male' where name = 'dogs' ; 
    Query OK, 0 rows affected  -- 更新失败,没有name 为 dogs  的 人
    Rows matched: 0  Changed: 0  Warnings: 0
    
    


    -------------删除数据 ------------

    删除需谨慎,不可逆操作 !!

    #  按照  条件是删除数据
    # 语法: delete from 表名 [条件];
    mysql>  delete from student where sex = 'male';
    Query OK, 1 row affected
    
    
  • 相关阅读:
    S5PV210开发板刷机(SD卡uboot、串口+USB-OTG刷机方法)
    S5PV210启动过程分析
    总结:ARM逻辑和高级C(朱老师物联网学习)
    C语言笔记(数组地址一些细节)
    shell脚本和常用命令
    ansible
    firewalld
    LAMP架构上线动态网站WordPress
    LNMP架构上线动态网站
    Tomcat集群 Nginx负载均衡 shell脚本实时监控Nginx
  • 原文地址:https://www.cnblogs.com/young-youth/p/11665646.html
Copyright © 2020-2023  润新知