MySQL基础知识

it2022-05-09  29

JDBC: 基础:JDBC的全称是Java DataBase Connectivity即Java数据库连接,它是一种可以执行的SQL语句的JavaAPI。 JDBC完成以下三个基本操作: 1.与数据库建立连接 2.执行SQL语句 3.获得SQL语句的执行 JDBC程序驱动类型 数据库驱动程序是JDBC程序和数据之间的转换层。数据库驱动程序负责将JDBC调用映 射成特定的数据库调用 ODBC的全称是Open Database Connectivity,即开放数据库连接。ODBC和JDBC很像,ODBC 也允许应用程序可以通过一组通用的API访问不同的数据库管理系统,从而使得基于ODBC的应用程序可以在不同数据库之间切换。同样ODBC也需要各数据库厂商提供相应的驱动,而ODBC则管理这些驱动。 JDBC的驱动通常有如下四种类型: 1.第一种JDBC程序:称为JDBC——ODBC桥,这种驱动是最早实现的JDBC驱动程序,主要目的是为了快速推广JDBC,这种驱动程序将JDBC API映射到ODBC API。JDBC-ODBC也需要驱动程序。 2.第二种JDBC驱动程序:直接将JDBC API映射成数据库特定的客户端API。这种驱动程序包含特定数据库的本地代码,用于访问特定数据库的客户端。 3.第三种JDBC驱动程序:支持三层结构的JDBC访问方式,主要用于Applet阶段,通过Applet访问数据库。 4.第四种JDBC驱动:是纯Java的,直接与数据库实例交互,这种驱动是智能的,他知道数据库使用的底层协议。这种驱动是目前最流行的JDBC驱动。 数据库管理系统的的全称是Database Mangement System,也被称为DBMD。我们常常会把数据库和数据库管理系统统统称为数据库,通常所说的数据库既包含存储用户数据的部分,也包括管理系统数据库的管理系统。 DBMS是所有数据的知识库,她负责数据的存储,安全,一致性,并发操作,恢复和访问等操作。DBMS有一个数据字典(系统表),用于存储她拥有的每个事物的相关信息。 按时间顺序出现了几种类型的数据库: 1.网状型数据库 2.层次型数据库 3.关系型数据库 4.面向对象数据库 net start mysql启动mysql mysql -u root -p进入mysql Mysql -p 密码 -u 用户名 -h 主机名;连接远程的主机的MySQL服务 MySQL数据库通常支持如下两种存储机制: 1.MyISAM:这是MySQL早期的默认的存储机制,对事物支持不够好 2.InnoDB:InnoDB提供事务安全的存储机制,InnoDB通过建立行级锁来保证事物的完整型,并以Oracle风格的共享锁来处理Select语句,系统默认使用InnoDB机制,如果不想使用InnoDB表,可以使用skip-innodb选项。 可以在标准建表语法的后面添加下面任意一句: 1.ENGINE=MySQL——强制使用MyISAM存储机制 2.ENGINE=InnDB——强制使用InnoDB存储机制 SQL语句基础: SQL的全称是Structured Query Language,也就是结构化查询语言。SQL是操作和检索关系型数据库的标准语言,标准SQL语句可用于操作任何关系数据库。 使用SQL语句可以完成如下任务: 1.在数据库中检索需要的信息 2.对数据库的信息进行更新 3.改变数据库的结构 4.更改系统的安全设置 5.增加用户对数据库或表的许可权限 程序员可以管理前三个,后两个通常由DBA完成 标准的SQL语句通常可分为如下几种类型: 1.查询语句:主要由于select关键字完成,查询语句是SQL语句中最复杂功能也最丰富的语句 2.DML语句(Data Manipulation Language,即数据操作语言):主要由insert,update和delete三个关键字完成 3.DDL语句(Data Definition Language 数据定义语言):主要由create,alter,drop和truncate四个关键字完成 4.DCL语句(Data Control Language 即数据控制语言):主要由grant和revoke两个关键字完成。 5.事务控制语句:主要由commit,rollback和savepoint三个关键字完成 truncate是一个特殊的DDL语句,truncate在很多数据库都被归类为DDL,它相当于先删除指定数据表,然后再重建该数据表。如果使用MySQL的普通存储机制,truncate确实是这样的,但如果使用InnoDB的存储机制,则比较复杂truncate table 比delete效率高,但如果该表被外键约束所参照,则依然被映射成delete操作。当使用快速truncate时,该操作会重设自动增长计数器。 SQL命令中也可能需要使用标识符,标识符的命名规则: 1.标识符通常必须以字母开头。 2.表示符可以包括字符,数字和三个特殊字符(#_$) 3.不要使用当前数据库系统的关键字,保留字,通常建议使用多个单词连缀而成,单词之间以_分隔 4.同一个模式下的对象不应该同名,这里的模式指的是外模式。 DDL语句:包括创建(create),删除(drop),修改(alter)数据库对象 创建表的语法如下: Create table [模式名.]表名 ( –可以定义多个列定义 CloumnName1 datatype [default expr], … ) 列定义时将列名放在前面,列类型放在后面,如果指定列的默认值,使用default关键字。=,而不是使用(=) MySQL支持的几种列类型: 使用子查询建表的语法: Create table [模式名.]表名 [column(,column…)] As subquery; 如:create table haha As Select * from user_inf; —创建haha数据表,该数据表和User——inf完全相同,数据也完全相同 当数据表创建成功后,MySQL使用information_schema数据库里的TABLES表来保存该数据库实例中所有数据表,用户可通过查询TABLES表来获取该数据库的表信息 修改表结构语法: 修改表使用Alter table ,修改表包括列定义,修改列定义,删除列,重命名列等操作 增加列语法: Alter table 表名 Add( –可以多个列定义 Column——namel datatype [default expr], … ); 如果只是新增一列,则可以省略圆括号,仅在add后紧跟一个列定义即可 SQL语句中字符串的值不是用双引号引起,而是单引号 增加字段时注意:如果数据表中以有了数据记录,除非给再增加的列指定了默认值,否则新增的数据列不可能指定非空约束,因为那些已有的记录在新增列上是空的(实际上:修改表结构很容易失败,只要新增的约束与已有数据冲突,修改就会失败) 修改列定义语法: Alter table 表名 Modify column_name datatype[default expr] [first|after col_name]; First或after col_name指定需要将目标修改到指定位置 Add新增列名必选是原表中不存在的,而modify修改的列名必须是原表中存在的。 如果需要让MySQL支持一次修改多个列,则可以在alter table使用多个modify命令 从数据表中删除列的语法标较简单: Alter table 表名 Drop column_name 删除列定义时将从每行中删除掉该列的数据,并释放该列在数据块中占用的空间,所以删除大表中的字段将需要比较长的时间,因为还需要回收空间。 MySQL还提供了两种特殊的语法:重命名数据表和完全改变列定义 重命名数据表的语法格式如下: Alter table 表名 Rename 新表名 MySQL 为alter table提供了change选项,该选项可以改变列名。Change选项的语法如下: Alter table 表名 Change old_column_name new_column_name type[default expr][first|after col_name] 只有当需要改变列名时才会使用change选项。 删除表的语法: 删除表的格式如下: Drop table 表名; 删除表的效果如下: 1.表结构被删除,表对象不存在 2.表里所有的数据被删除 3.该表所有相关的索引,约束也被删除 Truncate表: Truncate作用是删除该表里所有的数据,但保留表结构,truncate只能一次性的删除整个表的全部记录。 Truncate命令格式: Truncate 表名MySQL对truncate处理比较特殊:如果使用非InnoDB的存储机制,truncate比delete速度快,如果使用InnoDB的存储机制,truncate table比delete效率高,但如果被外键约束所参照,truncate又变为delete 约束概述: 约束主要用于保证数据库里数据的完整性,当表中数据存在相互依赖性时,可以保护相 关的数不被删除。 大部分数据库支持下面五类完整性约束: NOT NULL:非空约束,指定某列不能为空 UNIQUE:唯一约束,指定某列或者几列组合不能重复 PRIMARY KEY:主键,指定该列的值可以唯一的标识该条记录 FOREIGN KEY:外键,指定该行记录从属。属于主表中的一条记录,主要用于保证参照完整性。 CHECK:检查,指定一个布尔表达式,用于指定对应列的值必须满足该表达式 MySQL不支持CHECK约束,不会起任何作用。 根据约束对数据类列限制,可分为如下两类: 1.单列约束:每个约束只约束一列 2.多列约束;每个约束约束多个数据列 为数据表指定有两个时机: 1.在建表的同时为相应的数据列指定约束 2.建表后创建,以修改表的方式来增加约束(约束通常无法修改) MySQL使用information_schema数据库里的TABLE_CONSTRAINTS表来保存该数据库实例 中所有约束信息,用户可以通过查询TABLE_CONSTRAINTS表来获取该数据库的约束信息。 NOT NULL约束 SQL中null值有如下特性: 1.所有数据类型的值都可以是null,包括int , float等数据类型 2.空字符串不等于null,0也不等于null。 在创建表或修改表指定非空约束没只要在列定义后增加not null即可 UNIQUE约束: 唯一性约束用于保证指定列或指定的列组合不允许出现重复值,但可以出现多个null值 同一张表内可建多个唯一约束,唯一约束可由多个列组成,当为某列创建唯一约束时,MySQL会为该列相应的创建一个索引。如果不给唯一约束起名,该唯一约束默认与列名相同。 唯一约束既可以使用列级约束语法建立,也可以使用表级约束语法建立。如果需要为多列键组合约束,或者需要为唯一约束指定约束名,则只能用表级约束语法。 使用列级约束语法,只要在列定义后增加unique关键字即可: 如:–建表时创建唯一约束,使用的是列级约束语法 Create table unique_test ( –建立了非空约束 Test_Id int not null, –unique就是唯一约束,使用列级约束语法创建唯一约束 Test_name varchar(255) unique ) 如果需要为多列组合建立唯一约束,或者想自行指定约束名则需要使用表级约束语法,格式如下: –建表时创建唯一约束,使用表级约束语法约束 create table test2 ( –建立了非空约束 test_id int not null, test_name varchar(255) , test_pass varchar(255), –使用表级约束语法建唯一约束 unique (test_name), –使用表级约束语法建立唯一约束,而且指定约束名 constraint test2_uk unique(test_pass) ) 为这两列组合创建唯一约束 –建表时创建唯一约束,使用表级约束语法约束 create table test3 ( –建立了非空约束 test_id int not null, test_name varchar(255) , test_pass varchar(255), –使用表级约束语法建唯一约束,指定两列组合不能为空 constraint test3_uk unique(test_name,test_pass) –只要求test_name,test_pass两列值的组合不能重复 ) 也可以在修改表结构时使用add关键字增加唯一约束,如下: –添加唯一约束 Alter table unique_test3 Add unique(test_name,test_pass) 也可以在修改表时使用modify关键字,为单列采用列级约束语法来增加唯一约束,如: Alter table test3 Modify test_name varchar(255) unique; 大部分数据库而言,删除约束都是在alter table语句后使用drop constraint约束名的语法来删除,但MySQL并不使用这种方式,而是使用drop index约束名方式来来删除约束; –删除unique——test3表的test3_uk唯一约束: Alter table unique_3 Drop index test3_uk PRIMARY KEY约束: 主键约束相当于非空约束和唯一约束,即主键上约束的列既不允许出现重复值,也不允许出现null值;如果对多列组合建立主键约束,则多列里包含的每一列都不能为空,但只要求这些列组合不能重复。 每个表最多允许一个主键但这个主键约束可由多个数据列组合而成,主键是表中能唯一确定一行记录的字段或字段组合。 MySQL总是将所有主键约束命名为PRIMARY。也具有列级约束语法和表级约束语法。 当创建主键约束时,MySQL在主键约束所在列或列组合上建立对应的唯一索引 建表时创建主键约束,使用的是列级约束语法建约束; create table primary_test ( –建立主键约束 test_id int primary key, test_name varchar(255) ) 使用表结构: create table primary_test1 ( –建立主键约束 test_id int not null, test_name varchar(255), test_pass varchar(255), –指定主键约束名为test_pk,对大部分数据库有效,但对MySQL无效 –MySQL数据中该主键约束名依然是PRIMARY constraint test_pk primary key(test_id) ) 以多列建立组合主键,只能使用表级结构: create table primary_test2 ( –建立主键约束 test_id int not null, test_name varchar(255), test_pass varchar(255), –建立多列组合主键约束 constraint test_pk primary key(test_name,test_pass) )

如果删除指定主键约束,如下: –删除主键约束: Alter table primar_test3 Drop primary key; 为指定表增加主键约束,既可以通过modify修改列定义来增加主键约束,这将采用列级约束语句来增加主键约束;也可通过add添加来增加主键约束,这将采用表级约束语法来增加主键约束。如: –使用表级约束语法添加主键约束 Alter table primary_test3 Add primary key(test_name,test_pass) 如果只是为单独的数据增加列增加主键约束,也可使用modify修改列定义来实现,如: –使用列级约束语法添加主键约束 Alter table primary_test3 Modify test_name vaichar(255) primary key; 很多数据库对主键列都支持自增长的特性:如果某个数据列的类型是整形,而且该列作为主键列,则可指定该列具有自增长功能。指定自增长功能通常用于设置主键列–仅仅用于标识没行记录。 MySQL使用auto_increment来设置自增长,如: Create table primary_test4 ( –建立主键约束,使用自增长 Test_id int auto_increment primary key, Test_name varchar(255), Test_pass varchar(255) ); 一旦指定了某列具有自增长特性,则向该表插入记录时可不为该列指定值,该列值由系统自动生成。 FOREIGN KEY约束: 外键约束主要用于保存一个或两个数据表之间的参照完整性,外键是构建于一个表的两个字段或者两个表两个字段之间的参照关系,外键确保了相关的两个字段的参照关系,子表外键列的值必须在主表被参照列范围之内,或者为空(可以添加非空约束,强制不允许为空) 当主表的记录被从表记录参照时,主表记录不允许被删除,必须先把从表里参照该记录的所有记录全部删除后,才可以删除主表记录,还有一种方式,删除主表记录时级联删除从表中所有的参照该记录的从表记录。 建立外键约束时,MySQL也会为该列建立索引。从表外键参照的只能是主表主键列或者唯一键列,同一个表内可以拥有多个外键。 外键约束通常定义两个实体之间一对多,一对一关联关系。对于一对多的关联关系,通过在多的一端来增加外键列。对于一对一的关联关系,则可以选择任意一方来增加外键列,增加外键列的表被称为从表,只要将外键列增加唯一约束就可以标识一对一的关联关系,对于多对多的关系,则需要额外增加一个连接表来记录他们的关联关系。 如果仅对单独的数据列建立外键,则使用列级约束语法即可;如果需要对多列组合创建外键约束,或者需要为外键约束指定名字则必须使用表级约束语法 使用列级约束语法建立外键约束直接使用references关键字,references指定该列参照哪个表,以及主表的哪一列,如: –为了保证从表参照的主表存在,通常应该先建主表 create table teacher_table ( –auto_increment:实际上代表所有数据库的自动编号策略,通常用作数据表的逻辑主键 teacher_id int auto_increment, teacher_name varchar(255), primary key (teacher_id) ) create table student_table ( –为本表建立主键约束 student_id int auto_increment primary key, student_name varchar(255), –指定java_teacher参照到teacher_table的teacher_id列 Java_teacher int references teacher_table(teacher_id) ) 虽然MySQL支持列级约束语法来建立外键约束,但这种列级约束语法建立的外键约束不会生效,MySQL提供这种列级约束仅仅是和标准SQL保持良好的兼容性,如果需要外键约束生效,应该使用表级约束语法。 –为了保证从表参照的主表存在,通常应该先建主表 create table teacher_table ( –auto_increment:实际上代表所有数据库的自动编号策略,通常用作数据表的逻辑主键 teacher_id int auto_increment, teacher_name varchar(255), primary key (teacher_id) ); create table student_table ( –为本表建立主键约束 student_id int auto_increment primary key, student_name varchar(255), –指定java_teacher参照到teacher_table的teacher_id列 java_teacher int, foreign key(java_teacher) references teacher_table(teacher_id) )

使用表级约束名可以为外键约束指定约束名,如果创建外键约束时没有指定约束名,则MySQL会为该外键约束命名为table_name_ibfk_n,其中table_name是从表的表名,而n是从1的整数 –为了保证从表参照的主表存在,通常应该先建主表 create table teacher_table ( –auto_increment:实际上代表所有数据库的自动编号策略,通常用作数据表的逻辑主键 teacher_id int auto_increment, teacher_name varchar(255), primary key (teacher_id) ); create table student_table ( –为本表建立主键约束 student_id int auto_increment primary key, student_name varchar(255), –指定java_teacher参照到teacher_table的teacher_id列 java_teacher int, –使用表级约束语法建立外键约束。指定外键约束名为student_teacher_fk constraint student_teacher_fk foreign key(java_teacher) references teacher_table(teacher_id) )

如果需要建立多列组合的外键约束,则必须使用表级约束语法。

–为了保证从表参照的主表存在,通常应该先建主表 create table teacher_table ( –auto_increment:实际上代表所有数据库的自动编号策略,通常用作数据表的逻辑主键 teacher_id int auto_increment, teacher_name varchar(255), teacher_pass varchar(255), primary key (teacher_name,teacher_pass) ); create table student_table ( –为本表建立主键约束 student_id int auto_increment primary key, student_name varchar(255), java_teacher_name varchar(255), java_teacher_pass varchar(255), –使用表级约束语法建立外键约束,指定两列的联合外键 foreign key(java_teacher_name,java_teacher_pass) references teacher_table(teacher_name,teacher_pass) ) 删除外键约束,alter table后增加“for foreign key 约束名”如: –删除student_table3表上名为student_table3_idfk_1的外键约束 alter table student_table3 drop foreign key student_table3_ibfk_1; 增加外键约束使用add constraint 命令来增加未见约束。如; alter table student_table3 add foreign key(java_teacher_name,java_teacher_pass) references teacher_table(teacher_name,teacher_pass) 外键约束不仅可以参照其他表,也可参照自身,这种参照自身的情况通常被称为自关联, create table foreign_test ( foreign_id int auto_increment primary key, foreign_name carchar(255), –使用该表的refer_id参照到本表的foreign_id refer_id int, foreign key(refer_id) references foreign_test(foreign_id) )

如果想定义当删除表记录时,从表记录也会删除,则需要在建立在外键约束后添加on delete Cascade或on delete set null,第一种是删除主表记录时,把参照该主表记录全部级联删除;第二种是指定当删除主表记录时,把参照该主表记录的从表记录的外键设为null。如: create table teacher_table ( –auto_increment:实际上代表所有数据库的自动编号策略,通常用作数据表的逻辑主键 teacher_id int auto_increment, teacher_name varchar(255), teacher_pass varchar(255), primary key (teacher_id) ); create table student_table ( –为本表建立主键约束 student_id int auto_increment primary key, student_name varchar(255), java_teacher int, –使用表级约束语法建立外键约束,定义级联删除 foreign key(java_teacher) references teacher_table4(teacher_id) on delete cascade ) CHECK约束 建立CHECK约束的语法很简单,只要在建表的列定义后增加check(逻辑表达式即可),如: create table check_test ( emp_id int auto_increment, emp_name varchar(255), emp_salary decimal, primary key(emp_id), –建立check约束 check(emp_salary>0) );

索引: 索引是存放在模式(schema)中的一个数据库对象,索引总是从属于数据表,但它也和数据表一样,属于数据库对象。创建索引唯一的作用就是加速对表的擦查询,索引通过使用快速路径访问方法来快速定位数据,从而减少了磁盘的I/O。 索引作为数据库对象,在数据字典中独立存放,但不能独立存在,必须属于某个表。 MySQL使用information_schema数据库里的STATISTICS表来保存该数据库实例中所有索引信息。 创建索引有两种方式: 1.自动:当在表定义主键约束,唯一约束和外键约束是,系统会为该数据列自动创建对应的索引。 2.手动:用户可以手动创建索引来加速查询。 删除索引也有两种方式: 1.自动:数据表被删除时,该表上的索引自动被删除 2.手动:用户可以手动删除指定数据表上的指定索引 创建索引的语法格式如下: create index index_name on table_name (column[,column]…); 多列建立索引; create index emp_last_name_idx2 on employees(first_name,last_name) 删除索引需要指定表,如: drop index 索引名 on 表名 有些数据库删除索引时无需指定表名,因为他们要求建立索引时每个索引都有唯一的名 字,所以无需使用表名。 视图: 视图只是一个或多个数据表中数据的逻辑显示,使用视图的好处: 1.可以限制对数据的访问 2.可以使复杂的查询变的简单 3.提供了数据的独立性 4.提供了对相同数据的不同显示 视图只是数据表中数据的逻辑显示——也就是一个擦汗寻结果,所以创建视图就是建立 视图名和查询语句关联,创建视图的语法: create or replace view 视图名 as subquery 如果该视图不存在,则创建该视图;如果指定视图名的视图名的视图已经存在,则使用新视图替换原有的视图。Subquery就是一个查询语句 创建简单的视图: create or replace view view_test as select teacher_name,teacher_pass from teacher_table; 为了强制不允许改变视图数据,MySQL允许创建视图时使用with check option 字句,使用该子句创建的视图不允许修改,如: create or replace view view_test as select teacher_name from teacher_table –指定不允许修改该视图的数据 with check option; 大部分数据库使用with check option;来强制不允许修改视图数据,但Oracle采用with check option 删除视图: Drop view 视图名 DML语句语法: DML主要操作数据表里的数据,使用DML可以完成如下三个任务: 1.插入新数据 2.修改已有的数据 3.删除不需要的数据 DML语句由insert into,update 和delete form三个命令完成 Insert into 语句: Insert into用于向指定数据表中插入记录。对于标准SQL语句而言,每次只能插入一条记录。Insert into命令的语法格式: Insert into table_name[(column[,column…])] Values(value[,value…]); 执行插入操作时,表名后可以用括号列出所有需要插入值的列名,而values后用括号列出对应需要插入的值。 如果省略了表名后面的花括号里的列名列表,默认将为所有列都插入值,则需要为每一列都指定一个值。 必须在数据库中已经成功创建了数据表之后,才可以向数据表插入记录。 在表名后使用括号列数所有需要插入的值的列: 1.Insert into teacher_table2(teacher_name) Values(‘xyz’); 2.insert into teacher_table2 –使用null代替主键列的值 Values(null,’abc’); 外键约束规则:外键列里的值必须是被参照列里已有的值,所以从表中插入记录之前,通常应该先向主表中插入记录,否则从表的记录的外键列只能为null insert into student_table2 –当外键列里插值时,外键列的值必须是被参照列里已有的值 values (null,‘大哥’,2); 外键约束保证被参照的记录必须存在,但并不保证必须有被参照的记录,即外键列可以为null。如果想保证每条记录必须存在对应的主表记录,则应该使用非空,外键两个约束。 带子查询的插入可以插入多条记录: insert into student_table(student_name) –使用子查询的值来插入 select teacher_name from teacher_table2 MySQL提供一种扩展语法,通过这种扩展语法可以一次插入多条记录,MySQL允许在values后使用多个括号包含多条记录,表示多条记录的多个花括号之间以英文逗号(,)隔开,如: insert into teacher_table2 –同时插入多个值 values(null,“Yeeku”), (null,“大哥”) Update语句: Update用于修改数据库记录,每次修改可以修改多条记录,可通过使用where子句限定修改记录,where子句是一个条件表达式。Update语句的语法格式如下: update table_name set column1=value1[,column2=value2]… (null,“爸爸”) 使用update可以一次修改多列修改多列都是通过在set关键字后使用column1=value1,column2=valu2…来实现的,修改多列的值之间以英文逗号隔开

–将所有的teacher_name改成儿子 update table_name set teacher_name=“儿子” 可以通过添加where,修改特定的记录。 Delete from 语句 用于删除指定数据表的记录,使用delete from删除时不需要指定列名,因为删除总是整行整行的删除。Delete from 删除可以一次删除多行,删除那些行采用where子句限定,只删除满足where条件的记录。没有where子句将会把表里的全部记录删除。 语法格式: Delete from table_name [where condition] 如: Delete from teacher_table Where teacher_id>2 当主表的记录被从表记录参照时,主表记录不能被删除,只有先将从表中参照主表记录的所有数据全部删除后,才可删除主表记录。还有一种情况,定义外键约束时定义了主表记录和从表记录之间的级联删除on delete cascade,或者on delete set null用于指定当主表记录被删除时,从表中参照该记录的从表记录把外键列值设为null Select语句和SQL函数: Select语句不仅可以执行可以执行单表查查询,还可以执行多表连接查询,还可以进行子查询, select语句用于从一个或多个数据表中选出特定行,特定列的交集。 Select简单语法格式: Select column1,column2… From 数据源 [where condition] Select后的列表用于选择哪些列,where条件用于确定选择哪些行,只有当满足where条件记录才会被选出,如果没有where条件,则默认选所有行,如果想选择出所有的列,可使用星号()代表所有列 –选出teacher_table表中所有行,所有列的数据 select * from teacher_table 当使用select语句进行查询时,还可以在select语句中使用算术运算符(+,-,,/)形成表达式,语法规则: 1.对数值型数据列,变量,常量可以使用算术操作符(+ - * /)创建表达式 2.对日期型数据列,变量,常量可以使用部分算法操作符创建表达式(+ -),两个日期之间可以进行减法运算,日期和数值之间可进行加减运算 3.运算符不仅可以在列和常量,变量之间进行运算,也可以在两列之间进行运算。 如: --数据列实际上可当成一个变量 select teacher_id+5 from teacher_table; –查询出teacher table表中teacher_id3大于4的记录 select * from teacher table where teacher_id3>4 MySQL中没有提供字符串连接运算符即无法使用加号(+)将字符串常量,字符串变量或字符串连接起来。MySQL使用concat函数来进行字符串连接运算。 如: –选择出teacher_name和‘XX’字符串连接的结果 select concat(teacher_name,‘xx’) from teacher_table; 对于MySQL而言,如果在算术表达式中使用null,将会导致整个算术表达式的返回值为null 如果不希望直接使用列名作为列标题,可以为数据列或表达式起个别名,为数据列或表达式起别名时,别名紧跟数据列。中间以空格隔开,或者使用as 关键字: select teacher_id+5 as MY_ID from teacher_table 为列起别名可以改变列的标题头,用于表示计算结果的具体含义。如果列别名中使用使用特殊字符(如空格),或者需要强制大小写敏感,都可以通过为别名添加双引号实现如: –可以为选出的列起别名,别名包括单引号字符,所以把别名用双引号引起来 Select teacher-id+5 as “MY’id” From teacher_table 如果需要选择多列,并为多列起别名,则列于列之间以逗号隔开,但列和别名之间以空格隔开 如: Select teacher_id +5 MY_ID,teacher_name 老师名 From teacher_table; 不仅可以为列或表达式起别名,也可以为表起别名,为表起别名的语法和为列或表达式起别名的语法完全一样,如: Select teacher_id +5 MY_ID,teacher_name 老师名 –为teacher_table 起别名t From teacher_table t

Select 5+4 From teacher_table Where 2<9 这种情况比较特殊:where语句后的条件表达式总为true,所以将会把teacher_table表中的每一条记录都选择出来——但我们没有选择任何列,仅选择了一个常量,所以会把该常量当成一列,teacher_table表中有多少条记录,常量就出现多少次, MySQL提供了一种扩展语法,允许select语句后没有from子句,即:select 5+4; Select默认会把所有符合条件的记录全部选出,即使两行记录完全一样。如果想去除重复行,则可以使用distinct关键字从查询结果中清除重复行: –选出所有记录,包括重复行 Select student_name,java_teacher From student_table; –去除重复行 Select distinct student_name,java_teacher From student_table; 使用distinct去除重复行时,distinct紧跟select关键字。他的作用是去除后面字段组合的重复值,而不会管对记录在数据库里是否重复。 Where子句里包含的是一个条件表达式,所以where子句里可以使用>,>=,<,<=,=和<>等基本比较运算符 SQL中判断两个值是否相等的比较运算符是单等号,判断不相等的运算符是<>;SQL中的赋值运算符 不是等号,而是冒号等号(:=) Between val1 and val2必须保证val1小于val2,否则不选出任何记录,两个值不仅可以是常量,也可以是变量,或者是列名 使用In比较时,必须在in后的括号里列出一个或多个值,它要求指定列必须与in括号里任意一个值相等 Like运算符主要用于进行模糊查询,SQL语句中可以使用两个通配符:下划线(_)和百分号(%),其中下划线可以代表一个任意的字符,百分号可以代表任意多个字符 如果不希望SQL把下划线和百分号当成通配符使用,这需要使用转义字符,MySQL使用反斜线(\) 作为转义字符,如: –选出所有名字以下划线开头的学生 Select * from student_table Where student_name like ‘_%’ 在标准的SQL语句中并没有提供反斜线的转义字符,而是使用escape关键字显式的进行转义。 Is null用于判断某些值是否为空,判断是否为空不要用=null来判断,因为SQL中null=null返回null。 如果where子句后有多个条件需要组合,SQL提供了and和or逻辑运算符来组合2个条件,并提供了not来对逻辑表达式求否。 如果SQL代码需要改变优先级的默认顺序,可以使用花括号,括号的优先级比所有的运算符都高。 如果需要查询结果按某列值的大小进行排序,则可以使用order by子句。语法格式如下: Order by column_name1 [desc],column_name2… 进行排序默认按升序排序,如果强制按降序排列,则需要在列后使用desc关键字(与只对应的asc关键字,用不用一样,默认升序) Select * from student_table Order by java_teacher 如果需要按多列排序,每列的asc,desc必须单独设定,如果指定了多个排序列,则第一个排序列是首要排序列,,只有当第一列存在多个相同的值时,第二个排序列才会起作用。


最新回复(0)