1.SQL概述
结构化查询语言(structured Query Language)简称SQL,是一种特殊目的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询 更新和管理关系数据库系统,同事也是数据库脚本问加你的扩展名.
从上可以看出我们数据库相关工作职位大概两种: DBA和DBD
DBA是数据库管理员 databases administrator
DBD是数据库开发人员 database是 developer
SQL 是1986年 十月有美国国家标准局(ANSI)通过的数据库语言美国标准,接着,国际标准化组织(ISO)颁布了SQL正式国际标准.1989年4月,ISO提出了具有完整性特征的SQL89标准,1992年11月有公布了SQL92标准.
最常见的数据库软件名称:括DB2 ORACLE SYBASE MySQL SQLSERVER ACCESS等.
1.常见sql语句
Select 查询
Insert 插入
Delete 删除
Update 更新
2.理解数据库: 数据库是一个有组织的,根据具体标准分来的数据集合
例如:
档案库 = 数据库服务器
抽屉 = 数据库
文件 = 表
文件中每条信息 = 记录
2.SQL语句结构
SQL结构化查询
1.数据查询语言(DQL:Date Query Language )
其语句,也称为“数据检索语句”,用以从表中获得数据,确定数据怎样在应用程序给出。保留字
SELECT 是 DQL(也是所有 SQL)用得最多的动词,其他 DQL 常用的保留字有 WHERE,ORDER BY, GROUP BY 和 HAVING。这些 DQL 保留字常与其他类型的 SQL 语句一起使用。 2. 数据操作语言(DML:Data Manipulation Language) 其语句包括动词 INSERT,UPDATE 和 DELETE。它们分别用于添加,修改和删除表中的行。也称为 动作查询语言。 3. 事务处理语言(TPL):跟 shell 有点类似 由多条 SQL 语句组成的整体 它的语句能确保被 DML 语句影响的表的所有行及时得以更新。TPL 语句包括 BEGIN TRANSACTION,COMMIT 和 ROLLBACK。 4. 数据控制语言(DCL) 它的语句通过 GRANT 或 REVOKE 获得许可,确定单个用户和用户组对数据库对象的访问。某些 RDBMS 可用 GRANT 或 REVOKE 控制对表单个列的访问。 5. 数据定义语言(DDL) 其语句包括动词 CREATE 和 DROP。在数据库中创建新表或删除表(CREAT TABLE 或 DROP TABLE);为表加入索引等。DDL 包括许多与人数据库目录中获得数据有关的保留字。它也是动作查询的 一部分。 6. 指针控制语言(CCL) 它的语句,像 DECLARE CURSOR,FETCH INTO 和 UPDATE WHERE CURRENT 用于对一个或 多个表单独行的操作。declare [dɪˈkler] 声明 ; cursor [ˈkɜ:rsə(r)] 光标 ; into [ˈɪntu] 获取到 3.MySQL语句3.1 关 于 数 据 库 的 操 作 说明:本节使用 mariaDB 讲解说明(以下快速安装 mariaDB,如果仅安装 mariaDB 服务,则安装mariadb-server、mariadb 即可),本章最后演示升级 MySQL5.7 版本,往后章节则在 MySQL5.7 版本进行讲解 MySQL 安装 mariaDB: [root@root ~ ]# yum -y install mariadb-server mariadb 启动 mariaDB: [root@root ~]# systemctl start mariadb #启动 MariaDB 服务 [root@root ~]# systemctl enable mariadb #设置开启自动启动 MariaDB 服务 [root@root ~]# systemctl status mariadb #查看 MariaDB 服务状态 [root@root ~]# mysql_secure_installation #进入安全配置导向
NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MySQL SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY! In order to log into MySQL to secure it, we'll need the current password for the root user. If you've just installed MySQL, and you haven't set the root password yet, the password will be blank, so you should just press enter here. Enter current password for root (enter for none): #初次运行直接回车,因为 root 用户没有 密码 OK, successfully used password, moving on… Setting the root password ensures that nobody can log into the MySQL root user without the proper authorisation. Set root password? [Y/n] Y #是否设置 root 用户密码,输入 Y New password: 123456 #新密码 123456 Re-enter new password: 123456 Password updated successfully! 。。。 Remove anonymous users? [Y/n] Y #是否删除匿名用户,生产环境建议删除,所以直接回车或 Y ... Success! Normally, root should only be allowed to connect from 'localhost'. This ensures that someone cannot guess at the root password from the network. Disallow root login remotely? [Y/n] Y #是否禁止 root 远程登录,根据自己的需求选择 Y/n 并回车,建议禁止 ... Success! By default, MariaDB comes with a database named 'test' that anyone can access. This is also intended only for testing, and should be removed before moving into a production environment. Remove test database and access to it? [Y/n] Y #是否删除 test 数据库,直接回车或 Y - Dropping test database... ... Success! - Removing privileges on test database... ... Success! Reloading the privilege tables will ensure that all changes made so far will take effect immediately. Reload privilege tables now? [Y/n] Y #是否重新加载权限表,直接回车 ... Success! Cleaning up... All done! If you've completed all of the above steps, your MariaDB installation should now be secure. Thanks for using MariaDB! … Success!如果不做安全配置,设置root密码 : [root@xuegod63 ~]# mysqladmin -u root password "123456" 1.查看数据库 [root@xuegod63 ~]# mysql -u root -p123456 #指定用户名称密码登录数据库。 Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 28 Server version: 5.5.56-MariaDB MariaDBServer #从这里可以看出来,CentOS 7 中自带的 MariaDB 版本是 5.5.56,还是基于 MySQL 的 5.5 版本开发的 Copyright (c) 2000, 2017, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help.Type '\c' to clear the current input statement.
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
+--------------------+
3 rows in set (0.01 sec)
Marai DB[none] #这个none表示当前没选中任何数据库,当前中数据库,none会变成选中的数据库名.
例:
MariaDB [none]> use mysql; Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Database changed MariaDB [mysql]> 注: (1) information_schema #这数据库保存了 MySQL 服务器所有数据库的信息。如数据库名,数据库的表,表栏的数据类型不访问权限等。 schema [ˈskimə] 图表 (2) performance_schema #MySQL 5.5 开始新增一个数据库:PERFORMANCE_SCHEMA,主要用于收集数据库服务器性能参数。并且库里表的存储引擎均为 PERFORMANCE_SCHEMA,而用户是不能创建存储引擎为 PERFORMANCE_SCHEMA 的表。performance [pə ˈfɔ:məns] 性能 (3)mysql 库是系统库,里面保存有账户信息,权限信息等。 (4) MySQL 5.7 增加了 sys 系统数据库,通过这个库可以快速的了解系统的元数据信息。元数据是关于数据信息的数据,如:数据库名或表名,列的数据类型,或访问权限等。 例 1:MariaDB [mysql]> show databases \G #以行的方式显示 *************************** 1. row *************************** Database: information_schema *************************** 2. row *************************** Database: mysql *************************** 3. row *************************** Database: performance_schema MariaDB [mysql]> exit 例 2:mysql-e SQL 语句,可以直接在终端上运行,免交互执行。后面写 SQL 相关 Shell 可以用到 [root@root ~]# mysql -e 'show databases' -uroot -p123456 +-------------------------+ | Database | +-------------------------+ | information_schema | | mysql | | performance_schema | +-------------------------+ 2.创建数据库 语法:create database 数据库名; 创建数据库注意事项: (1) 在文件系统中,MySQL 的数据存储区将以目录方式表示 MySQL 数据库。因此,上面命令中的数据库名字必须与操作系统的约束的目录名字一致。例如不允许文件和目录名中有\,/,:,*,?,”,<,>,|这些符号,在 MySQL 数据库名字中这些字母会被自动删除。<遵从目录的约束> (2) 数据库的名字不能超过 64 个字符,包含特殊字符的名字或者是全部由数字或保留字组成的名字必须用反引号``包起来。 (3) 数据库不能重名。 例: MariaDB [root]> create database HA; #创建一个名为 HA 的数据库 MariaDB [root]> create database 'HA-test' ; #使用单引号时,是创建不了的 使用反引号可以创建成功: MariaDB [root]> create database `HA-test` ; MariaDB [HA]> create database `create`; 总结:单引号和反引号使用场景 反引号是为了区分 MySQL 的保留字与普通字符而引入的符号。 例:create database `create`; 如果不用反引号,MySQL 将把`create`视为保留字而导致出错,所以,有 MySQL 保留字作为字段的,必须加上反引号来区分。 引号一般用在字段的值,如果字段值是字符或字符串,则要加引号,如:select='字段值'不加反引号建的数据库或表不能包含 MySQL 保留字,否则出错。 [root@root ~]#ls /var/lib/mysql/ #查看数据库存放目录
3.选择要操作的数据库 使用 USE 语句将会选择一个数据库成为当前数据库。后面的操作默认都在被选择的数据库中操作。 MariaDB [none]> use HA-test; Database changed 4.查看自己所处的位置及默认所在的位置 MariaDB [HA-test]> select database(); +--------------+ | database() | +--------------+ | HA-test | +--------------+ 如果什么数据库也没有选择,默认显示的是 NULL,Null 意味着没有选择数据库 MariaDB [none]> select database(); +--------------+ | database() | +--------------+ | NULL | +--------------+ 1 row in set (0.00 sec) 5.在命令行选择默认的数据库 [root@root ~]# mysql –u root -p123456 HA MariaDB [HA]> select now(),user(),database(); +-------------------------+-------------------+---------------+ | now() | user() | database() | +-------------------------+-------------------+---------------+ | 2018-06-28 17:33:59 | root@localhost | HA | +-------------------------+-------------------+---------------+ 1 row in set (0.00 sec) 6.删除数据库:删除没有任何提示,要慎重操作方法 1:在数 MariaDB 数据库中使用 DROP 命令删除库。 MariaDB [none]> drop database `HA-test`; Query OK, 0 rows affected (0.00 sec) 方法 2:直接到数据库存放目录中,将对应的库的目录移出就行。 MariaDB [none]> create database `HA-test1`; #创建数据库 HA-test1 [root@root ~]# cd /var/lib/mysql/ [root@root mysql]# mv HA@002dtest1 /opt/ # HA@002dtest1 代表 HA-test1 MariaDB [none]> show databases; #查看时,已经看不到数据库 HA-test1
方法 3:使用 IF EXISTS 子句以避免删除不存在的数据库时出现的 MySQL 的错误信息
MariaDB [none]> drop database if exists `HA-test`; #IF EXISTS:如果存在则删除
Query OK, 0 rows affected, 1 warning (0.00 sec)
同理我们创建数据库时也可以使用 IF EXISTS MariaDB [none]> create database if not exists HA; 3.2 关于表的操作 1. 查看库有哪些表,查看表时,要进入到数据库再查看 MariaDB [none ]> use mysql; Database changed MariaDB [mysql]> show tables; +------------------------------+ | Tables_in_mysql | +------------------------------+ | columns_priv | | db || event | | func | | general_log | | help_category | | help_keyword | | help_relation | | help_topic | | host | | ndb_binlog_index | | plugin | | proc | | procs_priv | | proxies_priv | | servers | | slow_log | | tables_priv | | time_zone | | time_zone_leap_second | | time_zone_name | | time_zone_transition | | time_zone_transition_type | | user | +------------------------------+ 2. 创建表 语法 : create table 表名 (字段名 类型, 字段名 类型, 底断面 类型): 创建前必须的有库所以先创建 MariaDB [none]> create database xuegod; MariaDB [none]> use xuegod; MariaDB [root]> create table student(id int (20),name char(40),age int(11)); 3. 查看表的结构 describe [dɪˈskraɪb] 描述 方法 1: MariaDB [root]>desc student;查看表结构其他方法(了解):
MariaDB [root]> explain xuegod.student; # explain [ɪkˈspleɪn] 解释MariaDB [xuegod]> show columns from xuegod.student; # column ['kɒləm] 列 MariaDB [root]> show fields from xuegod.student; # field [fi:ld] 领域 会一种常用的就行 4. 查看创建表执行了哪些命令 MariaDB [xuegod]> show create table student \G *************************** 1. row *************************** Table: student Create Table: CREATE TABLE `student` ( `id` int(20) DEFAULT NULL, `name` char(40) DEFAULT NULL, `age` int(11) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=latin1 1 row in set (0.00 sec)MariaDB [xuegod]>create table student2(id int(20),name char(40),age int)ENGINE=MyISAM DEFAULT CHARSET=utf8; #可以指定表的默认存储引擎和字符集 MariaDB [root]> show create table student2\G
5. 删除表 MariaDB [root]> drop table student2; Query OK, 0 rows affected (0.01 sec) 6. 禁止预读表信息 没有禁止前的提示 MariaDB [root]> use performance_schema; Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A 登录的时候加上-A 参数 [root@root ~]# mysql -uroot-p123456 -A MariaDB [(none)]> use performance_schema; Database changed7. 修改表名称 alter 语法:alter table 表名 rename 新表名; MariaDB [none]> use xuegod; MariaDB [root]>alter table student rename students; #studen 表名修改为 students MariaDB [root]> show tables; +--------------------+ | Tables_in_xuegod| +--------------------+ | students +---------+--------------+---------+---------+---------+---------+ | Field | Type | Null | Key | Default | Extra | +---------+--------------+---------+---------+---------+---------+ | id | int(20) | YES | | NULL | | | name | char(40) | YES | | NULL | | | age | int(11) | YES | | NULL | | +---------+--------------+---------+---------+---------+---------+ MariaDB [root]>alter table students modify id int(10); MariaDB [root]> desc students;
9. 修改表中的字段类型和字段名称 语法:alter table 表名 change 原字段名新字段名新字段类型; 注意:MySQL 不支持同时修改多个字段。 MODIFY [COLUMN] col_namecolumn_definition [FIRST | AFTER col_name] 来源:http://dev.mysql.com/doc/refman/5.5/en/alter-table.html +---------+---------+---------+----+--------------+-------+| Field | Type | Null | Key | Default | Extra | +---------+---------+---------+----+--------------+-------+ | id | int(10) | YES | | NULL | | | name |char(40)| YES | | NULL | | | age | int(11) | YES | | NULL | | +---------+---------+---------+----+--------------+-------+ MariaDB [root]> alter table students change name stname char(20); MariaDB [root]> desc students; 注:CHANGE 和MODIFY的区别: CHANGE 对列进行重命名和更改列的类型,需给定旧的列名称和新的列名称、当前的类型。MODIFY可以改变列的类型,此时不需要重命名(不需给定新的列名称) 10. 在表中添加字段 语法:alter table 表名 add 字段名 字段类型; MariaDB [root]> alter table students add sex enum('M','W'); MariaDB [root]> desc students;
11. 指定位置添加字段,在第一列添加一个字段
MariaDB [root]> alter table students add uid int(10) first; MariaDB [root]> desc students;在 age 后面添加一个 address 字段:
MariaDB [root]>alter table students add address char(40) after age; MariaDB [root]> desc students;12. 删除表中字段 语法:alter table 表名 drop 字段名 ; MariaDB [root]> alter table students drop address;