1.SQL语言基础
1.1 SQL简介
- SQL:结构化查询语言(Structured Query Language),在关系型数据库上执行数据操作、数据检索以及数据维护的标准语言。使用SQL语句,程序员和数据库管理员可以完成如下的任务。
- 改变数据库的结构。
- 更改系统的安全设置。
增加用户对数据库或表的许可权限。
在数据库中检索需要的信息。
对数据库的信息进行更新。
1.2 SQL语句分类
- MySQL致力于支持全套ANSI/ISO SQL标准。在MySQL数据库中,SQL语句主要可以划分为以下几类。
- DDL(Data Definition Language):数据定义语言,定义对数据库对象(库、表、列、索引)的操作,如:CREATE、DROP、ALTER、RENAME、TRUNCATE等。
DML(Data Manipulation Language):数据操作语言,定义对数据库记录的操作,如:INSERT、DELETE、UPDATE、SELECT等。
- DCL(Data Control Language):数据控制语言,定义对数据库、表、字段、用户的访问权限和安全级别,如:
- GRANT、REVOKE等
- Transaction Control:事务控制
- GRANT、REVOKE等
COMMIT、ROLLBACK、SAVEPOINT等
1.3 SQL语句的书写规范
在数据库系统中,SQL语句不区分大小写(建议用大写),但字符串常量区分大小写
SQL语句可单行或多行书写,以“;”结尾。关键词不能跨多行或简写。用空格和缩进来提高语句的可读性。注释:/* */和//为多行注释--和#为单行注释2 . 数据库操作
2.1数据库的登录及退出
准备工作:
[root@server~]# systemctl start mysqld#必须先启动服务否则报错,如下所述报错信息:[root@server~]# mysql -u root -pEnterpassword:(报错)ERROR2002(HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)登录格式:
mysql-u用户名-h服务器的主机地址-p密码分析:-u后面跟登录数据库的用户名,这里使用root-h后面的参数是服务器的主机地址,在这里客户端和服务器在同一台机器上,所以输入 localhost 或者IP地址-p后面是用户登录密码,注意:-p和密码之间没有空格。如果出现空格,系统将不会把后面 的字符串当成密码来对待,没有密码时不写登录信息如下:[root@server~]# mysql -uroot -pEnterpassword:Welcometothe MySQL monitor. Commandsend with;or\g.Your MySQLconnectionidis16Serverversion:8.0.37MySQL CommunityServer-GPLCopyright(c)2000,2024, Oracleand/or its affiliates.Oracleisa registered trademark of Oracle Corporationand/or itsaffiliates. Other names may be trademarks of their respectiveowners.Type'help;'or'\h'for help. Type'\c'toclearthecurrentinput statement.显示信息解释:Commands end with; or\g:mysql命令是以分号(;)或“\g”来结束的,遇到这个结束符就开 始执行命令Your MySQL connection id is 22:数据库的连接次数Server version: 8.0.37 Source distribution: 版本Type 'help;' or '\h' for help:输入”help;“或者”\h“可以看到帮助信息Type '\c' to clear the current input statement:表示遇到”\c“就清除前面的命令,注意不是 清屏退出:exit quit \q#注意:带有密码登录,会有警告,提示不安全[root@server~]# mysql -uroot -p123456mysql:[Warning]Usingapassword onthe command line interface can be insecure.Welcometothe MySQL monitor. Commandsend with;or\g.Your MySQLconnectionidis17Serverversion:8.0.37MySQL CommunityServer-GPLCopyright(c)2000,2024, Oracleand/or its affiliates.Oracleisa registered trademark of Oracle Corporationand/or itsaffiliates. Other names may be trademarks of their respectiveowners.Type'help;'or'\h'for help. Type'\c'toclearthecurrentinput statement.2.2查看数据库格式:
mysql>show databases[like条件];#注意有s+-----------------------------+|Database|+-----------------------------+|information_schema||mysql||performance_schema||sys|+-----------------------------+4rowsin set(0.00sec)3.创建数据库
格式:
create database数据库名
实例:
mysql>create databasetestdb;QueryOK,1rowaffected(0.00sec)mysql>show databases;+------------------------------+|Database|+------------------------------+|information_schema||mysql||performance_schema||sys||testdb|+------------------------------+若数据库已存在,则报错mysql>create databasetestdb;ERROR1007(HY000): Can't create database 'testdb'; database exists查看创建数据库的语句:格式show create database数据库名实例mysql>show create databasetestdb;+----------+----------------------------------------------------------------------------------------------------------------------------------+|Database|Create Database|+----------+----------------------------------------------------------------------------------------------------------------------------------+|testdb|CREATE DATABASE`testdb`/*!40100 DEFAULT CHARACTER SET utf8mb4COLLATE utf8mb4_0900_ai_ci */ /*!80016 DEFAULT ENCRYPTION='N' */|+----------+----------------------------------------------------------------------------------------------------------------------------------+1row in set(0.00sec)#上述表格因为内容太长,出现了折行显示#可以在语句末尾加上\Gmysql>show create databasetestdb\G #结尾无分号***************************1.row***************************Database: testdbCreate Database:CREATE DATABASE`testdb`/*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci *//*!80016DEFAULTENCRYPTION='N' */#分析:#上述显示创建数据库语句的内容可看做3段内容# CREATE DATABASE `testdb`:表示创建数据库testdb# /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci */:表示 注释内容,显示字符集采用utf8mb4方案,一个字符需要1 ~ 4个字节。可以存储一些emoji表情; utf8mb4_0900_ai_ci表示字符比较规则即ai为不区分重音,ci为不区分大小写# /*!80016 DEFAULT ENCRYPTION='N' */表示数据库未加密注意:在创建数据库或查看创建数据库语句时,database没有smysql中的反引号上例中查看的sql语句有反引号,其作用可以避免一些与SQL语法冲突的问题,同时可以使代码更加 规范化和易读性更强#创建一个名字为database的数据库,系统会认为database是关键词,所以会报错mysql>create database database;ERROR1064(42000): You have an errorinyourSQLsyntax;checkthe manual that correspondstoyour MySQLserverversionfortherightsyntaxto usenear'database'atline1#加上``反引号即可解决mysql>create database`database`;QueryOK,1rowaffected(0.01sec)注意:- 只有保留关键字和特殊字符需要使用反引号,普通的表名和列名不需要
- 数据类型之间可以加或者不加反引号,但为了代码规范化,建议加上
- 不推荐使用关键字作为数据库或表名
4.切换数据库
- 查看当前使用的数据库
- 格式:
select database();- 示例:
mysql>select database();+--------------+|database()|+--------------+|NULL|+--------------+- 注意:当前没有使用数据库,则显示空
- 选择数据库
- 格式
use数据库名- 实例
mysql>usetestdb;#切换数据库可不加;号Database changedmysql>select database();#再次查看+---------------+|database()|+---------------+|testdb|+---------------+5.删除数据库
- 格式
drop database数据库名
- 实例
mysql>drop databasetestdb;QueryOK,0rows affected(0.01sec)mysql>show databases;+------------------------------+|Database|+------------------------------+|information_schema||mysql||performance_schema||sys|+------------------------------+