争用条件:多个线程同时访问同一数据(内存区域)时,每个线程都尝试操作该数据,从而导致数据被破坏,称为争用条件
交互方式:互斥与同步
互斥:同一时间只能有一条线程对临界区进行操作
同步:线程之间的通信机制,通过一种方式告诉其他线程当前线程的任务做完了
1、实现互斥:
private final Object lockObj = new Object
synchronized(lockObj){....}
2、实现同步:lockObj.wait()和lockObj.notifyAll()
mySql
登陆命令:mysql -uroot -p -P3306 -h127.0.0.1
退出:exit;
quit;
\q;
修改提示符:
登陆时修改:mysql -uroot -p1997 -prompt 提示符
登陆后修改:prompt 提示符
规范:
关键字、函数名称全部大写
数据库名称、表名称、字段名称全部小写
SQL语句必须以分号结尾
数据库操作:
创建数据库:CREATE {DATABASE|SCHEMA} [IF NOT EXISTS] db_name [DEFAULT] CHARACTER SET [=] charset_name;
查看数据库的创建信息:SHOW CREATE DATABASE db_name;
查看所有数据库:SHOW DATABASES;
修改数据库:ALTER {DATABASE|SCHEMA} db_name [DEFAULT] CHARACTER SET [=] charset_name;
删除数据库: DROP {DATABASE|SCHEMA} [IF EXISTS] db_name;
数据类型:
整型:TINYINT(1字节);SMALLINT(2字节);MEDIUMINT(3字节);INT(4字节);BIGINT(8字节)
浮点型:FLOAT DOUBLE
日期类型:
字符型:CHAR;VARCHAR;TINYTEXT;TEXT;MEDIUMTEXT;LONGTEXT;ENUM(枚举);SET
数据表的操作
USE 数据库名称:打开数据库
创建数据表:CREATE TABLE [IF NOT EXISTS] table_name(column_name,data_type,...)
删除数据表:DROP TABLE tb_name;
查看数据表列表:SHOW TABLES [FROM db_name][LINK 'pattern' | WHERE expr]查看数据表结构:SHOW COLUMNS FROM tbl_name
插入记录(行):INSERT [INTO] tbl_name [(col_name,...)] VALUES(val,...) //如果省略掉列名,则须为所有字段赋值
查找记录:SELECT expr,... FROM tbl_name
NULL:空值,字段值可以为空
NOT NULL:非空,字段值禁止为空
AUTO_INCREMENT:自动编号,且必须与主键组合使用,默认情况下,起始值为1,每次增量为1
主键约束(PRIMARY KEY):每个数据表只能存在一个主键,且主键不能有重复的值,主键可以保证记录的唯一性,主键自 动为NOT NULL,AUTO_INCREMENT字段必须定义为主键,但主键不一定AUTO_INCREMENT一起使用
唯一约束(UNIQUE KEY):也可以表示记录的唯一性,一个数据表可以有多个UNIQUE KEY,唯一约束的字段可以为NULL,存储时即使有多个值为空 值,但最终保留的空值只有一个。
默认约束(DEFAULT):当插入记录时,若没有明确为这个字段赋值,则自动赋予默认值
JDBC
JDBC使用步骤:
1、加载驱动程序:Class.forName(driverClass)
加载Mysql驱动:Class.forName("com.mysql.jdbc.Driver")
加载Oracle驱动:Class.forName("oracle.jdbc.driver.OracleDriver")
2、获得数据库连接:DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/imooc","root","root")