⑴ sql語句怎麼查詢表的主鍵
1、打開【SQL Server Management Studio】管理工具,連接資料庫。
⑵ mysql 插入數據後返回主鍵
你可以看看這里,大致有三種辦法:
#方法一是使用last_insert_id
SELECTLAST_INSERT_ID();
#方法二是使用max(id),但是不適用高並發環境下。
方法三是創建一個存儲過程,在存儲過程中調用先插入再獲取最大值的操作
#方法四使用@@identity
select@@IDENTITY
#基本MySQL的學習,可以學習這里。使用MariaDB資料庫管理系統。linuxprobe.com/chapter-18.html
#出處:
⑶ 常見的幾個資料庫insert into操作的主鍵返回值
插入一條記錄時,我們很多時候都想馬當前插入的主鍵返回出來.作為另一個操作的條件.如果主鍵是
自動生成的(大多數時候是這樣),那麼取回主鍵是一種比較困難的事.可能對於一些特殊的資料庫必須把
insert into和select max(key)或什麼序列當前值作為一個事務的原子來操作,但很多資料庫(以及資料庫操作環境)
並不能為你提供事務並發控制.所以如果多人同時操作,那麼select max(key)很可能就不是你剛才insert的
那條記錄.
在JDBC3.0中,已經可以直接返回insert 語句的主KEY和其它值,但目前只有mysql支持.oracl和sqlserver
的JDBC都不支持這個特性.而且如果離開JAVA平台就沒有這個特性了.
詳細讀了oacle,sqlserver,mysql的文檔,對上面三種資料庫找到了以下解決方案,在java和非java平台都適用:
SQLServer:
INSERT INTO tableName (fieldList ...) values (valueList ...) SELECT @@IDENTITY AS aliasName;
這一句相當於執行查詢操作,從結果集中getXXX(aliasName);就可以獲取.
Oracle:
INSERT INTO tableName (fieldList ...) values (valueList ...) RETURNING [primaryKey INTO]:aliasName;
同上的方法可以獲取.這兩種方法都是資料庫支持的sql語句,原以根本不存在並發沖突.
mysql:
沒有找到可以絕對保證原子性的語句(誰知道反饋一下)
如果是在JAVA平台,可以直接利用 Statement的返回鍵特性.比較安全,在非java平台上,目前只能通過在同一會話中用
LAST_INSERT_ID([columnName])來獲取,注意一定要在同一會話中.
⑷ 搜集SQL常用的操作語句
結構化查詢語言(Structured Query Language)簡稱SQL(發音:/ˈes kjuː ˈel/ "S-Q-L"),是一種特殊目的的編程語言,是一種資料庫查詢和程序設計語言,用於存取數據以及查詢、更新和管理關系資料庫系統;同時也是資料庫腳本文件的擴展名。
一、插入(復制)表數據
1、INSERT INTO 語句:
(1)插入新的一行數
[sql] view plain ;
INSERT INTO Persons VALUES ('Gates', 'Bill', 'Xuanwumen 10', 'Beijing');
(2)在指定的列中插入數據
[sql] view plain ;
INSERT INTO Persons (LastName, Address) VALUES ('Wilson', 'Champs-Elysees');
2、SQL SELECT INTO 語句可用於創建表的備份復件
(1)在建表時復制所有數據
[sql] view plain ;
create table userinfo_new as select * from userinfo;
(2)在建表時復制部分數據
[sql] view plain ;
create table userinfo_new1 as select id,username from userinfo;
(3)在添加時復制所有數據
[sql] view plain ;
insert into userinfo_new select * from userinfo;
(4)在添加時復制部分數據
[sql] view plain ;
insert into userinfo_new(id,username) select id,username from userinfo;
二、修改表數據
Update 語句
(1)無條件更新
[sql] view plain ;
update userinfo set userpwd='111',email='[email protected]';
(2)有條件更新
[sql] view plain ;
update userinfo set userpwd='123456' where username='xxx';
三、刪除表數據
1、DELETE 語句
(1)無條件刪除
[sql]view plain;
daletefromuserinfo;
(2)有條件刪除
[sql]view plain;
='yyy';
四、查詢表數據
1、SELECT 語句:
(1)查詢所有欄位
[sql] view plain ;
select * from users;
(2)查詢指定欄位
[sql] view plain ;
select username,salary from users;
2、SELECT DISTINCT 語句
從 Company" 列中僅選取唯一不同的值,需要使用 SELECT DISTINCT 語句:
[sql] view plain ;
SELECT DISTINCT Company FROM Orders;
⑸ PHP+Mysql如何取出存進數組對應主鍵那一行的數據
將數組序列化存儲,例如
$stooges = array('Moe','Larry','Curly');
$new = serialize($stooges);
print_r($new);echo "<br />";
print_r(unserialize($new));
結果:a:3:{i:0;s:3:"Moe";i:1;s:5:"Larry";i:2;s:5:"Curly";}
Array ( [0] => Moe [1] => Larry [2] => Curly )
把$new寫進資料庫就行啦
⑹ es導入數據,數據變少
分析
現在導致數據被刪除的情況應該是a表和b表的主鍵id重復,es默認mysql中的 id 為主鍵 並且document 的_id 和id保持一致, 導致a表中的數據被刪除掉了(替換掉了)
三、解決方案
新建一個欄位保存資料庫的id 主鍵數據, 查詢的時候使用uuid作為id的數據
注意
es2.0以後就不支持修改_id映射為其他欄位了,es也不支持聯合主鍵之類的。
⑺ SQL中的每一張表都必須設有主鍵嗎
SQL中不是必須設置主鍵。
主關鍵字(primary key)的意思是表中的一個或多個欄位,它的值用於唯一地標識表中的某一條記錄。
在兩個表的關系中,主關鍵字用來在一個表中引用來自於另一個表中的特定記錄,主關鍵字是一種唯一關鍵字,表定義的一部分。
一個表不能有多個主關鍵字,並且主關鍵字的列不能包含空值。主關鍵字是可選的,並且可在 CREATE TABLE 或 ALTER TABLE 語句中定義。主鍵只是說對一種表和表關系的關聯而已,還有就是在建主鍵的時候會自動內添加個索引,某些情況下可以增加查詢速度容,如果只是簡單的對單表操作的話,沒有必要去設置主鍵。
(7)essql返回主鍵擴展閱讀:
結構化查詢語言(Structured Query Language)簡稱SQL(發音:/ˈes kjuː ˈel/ "S-Q-L"),是一種特殊目的的編程語言,是一種資料庫查詢和程序設計語言,用於存取數據以及查詢、更新和管理關系資料庫系統;同時也是資料庫腳本文件的擴展名。
結構化查詢語言是高級的非過程化編程語言,允許用戶在高層數據結構上工作。它不要求用戶指定對數據的存放方法,也不需要用戶了解具體的數據存放方式,所以具有完全不同底層結構的不同資料庫系統, 可以使用相同的結構化查詢語言作為數據輸入與管理的介面。結構化查詢語言語句可以嵌套,這使它具有極大的靈活性和強大的功能。
⑻ 如何獲取資料庫當前的主鍵欄位
查詢資料庫利用上邊的要領資料庫如何設置主鍵可以由記載生成對象,但是你仍然得用SQL語句來查詢資料庫,這需要對資料庫布局有深切的相識這還是沒有解決問題,雖則我們能夠不傭人的勞力地般配資料庫表和類的名兒,但是還是必需手工編寫SQL語句這就是說每一次修改資料庫布局後,將不得不手工編輯這些查詢語句不外,我們仍然可以利用前文所述的要領來越過這個障礙通常而言,查詢關系資料庫時,你將會用到屬於主鍵或索引的欄位名和值一言弊之,如果或人向你供給了適當的欄位名和欄位值
,你就可以從響應的資料庫中抽取符合要求的記載(或欄位)而DatabaseMetaData對象不單可以被用於檢索一系列的表名(見上所述資料庫主鍵是啥子),並且可以獲得一系列的主鍵及索引欄位上邊的問題由此可以迎刃而解
通過填入一系列適當的(欄位名,欄位值)對,可以利用相對於而言少得多的代碼使成為事實對關系資料庫的查詢你可以將對子中的所有欄位名和資料庫中的主健及索引欄位相般配每一當你找到了名兒列表中響應的主健或索引欄位,可以根據響應的數值來生成一個SQL語句,執行它來獲取RecordSet,並通過Class.forName()構造機
制將結果轉化為對象使成為事實這一設法要求可以以(名,值)對的方式對與資料庫表相乾的每個類的數據元素進行存取但是這類要領只有通過上節所述的通用父類才能趨於完美清單3和4利用偽碼表示資料庫主鍵是啥子了這一要領
Openthedatabaseconnection
foreachtable
{
if(itisavailabe)
{
loadtheclassfile
你好stable
}
elsethrowanexception
}
· 清單3:初始化資料庫毗連的偽碼
(name,value)pairs
foreachtableT
{
foreach(name,value)pair
{
if(namematchesprimary_key_fieldorindex_field)
}
ifallkey_fieldswerefound
elseifallindex_fieldswerefound
ForeachrecordintheResultSet
{
''''scontents
Addtheobjecttotheresults,eg,attac你好ttoA
}
}
· 清單4:描寫資料庫查詢的偽碼
Java鏡像和JavabeansJava1.1研發套件(JDK)的引入,為我們帶來了很多壯大的新性能,例如全新的用戶界面介面類有兩個新的JDKAPI尤其值當注重:鏡像機制(java.lang.reflect包)和JavaBeans組件的應用程序介面(java.beans包)這兩個API將會幫助我們創立高明的資料庫類,使我們可以利用有關類的meta-信息,以此來解決研發通用資料庫類中的問題
領有forName()和newInstance()要領的Class類,僅只是鏡象(reflection)功效的一個簡略例子真正重要的是,forName()字元串參數不必需是源程序中出現的字元串只要給出一個名兒(這個名兒可從任何地方取來),你就可以載入並實例化任何一個類對於我們的資料庫類資料庫如何設置主鍵,我們可以直接從資料庫自身的表名中得到類名這就是說,與資料庫表相乾的Java類名其實不需要出現在源程序中響應地,當表名改變或某個表被加入到資料庫中時,不需要修改源碼,只要確信帶有新名兒的類已存在你的體系中
鏡像類象徵著可以在及時運行中獲取、儲存和處置懲罰Java程序中的類信息它們的實例能夠象任何Java對象同樣被運用,你可以象修改字元串和整兒同樣,去修改類、數據類型、返回類型、要領參照和參數在源程序級,這個鏡像的觀點看起來並無啥子價值——因為可以應用你自己的編碼直接存取你所需要的有關類、要領及參數的所有信息但是,鏡像(reflection)將資料庫修改主鍵會在java的編譯文件中發揮作用JavaBeanSAPI的作用是:通過應用程序的構造機制利用來自於全然不同的研發者或產商所編寫的類
JavaBeans規范為類成員的名兒制定一系列的條例以確保要領函數的名兒能體系地描寫它們的功效任何一個符正當則的Java類均可以被一個Bean的內化實例(通過鏡像)查抄,以展現其舉動的重要特徵——諸如對於啥子樣的事件類將有所響應,和該類將會孕育發生啥子樣的事件等等任何符合這些規范的類都是高效的Bean,因而是一個組件有理論上,這象徵著你可以從各類來歷網路一系列beans,當需要它們時可以將其其及時地綁在一路一個Bean的例子
在底下一個名為Translation的Bean中資料庫主鍵生成計謀,有一個構造函數和兩個要領來操作一個名為「language」的屬性這里我想誇大的是,既然你可以通過查抄一個類的代碼來相識它的構造函數、要領及屬性,那麼Bean的內化器(Introspector)也能做到
{
intlanguage;
publictranslation()
{
}
publicintgetlanguage()
{
return(language);
}
publicvoidsetLanguage(intlanguage)
{
t你好slanguage=language;
}
}
⑼ 想返回主鍵值,但sql語句一直報錯,不知道為什麼,是在MySql環境使用的,求大神幫助!
MySql環境, 獲取最新創建的 主鍵值.
不是使用 select @@identity 呀.
這個 select @@identity, 是 SQL Server 資料庫用的。
mysql 是使用另外一個函數, 下面是例子:
mysql> CREATE TABLE test_create_tab2 (
-> id INT AUTO_INCREMENT,
-> val VARCHAR(10),
-> PRIMARY KEY (id)
-> );
Query OK, 0 rows affected (0.09 sec)
mysql> INSERT INTO test_create_tab2(val) VALUES ('NO id');
Query OK, 1 row affected (0.03 sec)
mysql> select last_insert_id() as id;
+----+
| id |
+----+
| 1 |
+----+
1 row in set (0.00 sec)
mysql> INSERT INTO test_create_tab2(val) VALUES ('NO id 2');
Query OK, 1 row affected (0.03 sec)
mysql> select last_insert_id() as id;
+----+
| id |
+----+
| 2 |
+----+
1 row in set (0.00 sec)
mysql> select * from test_create_tab2;
+----+---------+
| id | val |
+----+---------+
| 1 | NO id |
| 2 | NO id 2 |
+----+---------+
2 rows in set (0.00 sec)
⑽ 如何修改表 比如增加外碼約束,增加check yues,等等
如果是用企業管理器
滑鼠右鍵點你的表,然後點設計表
再在你插入的欄位的空白處右鍵點,會有check約束,主外鍵,關系
如果用查詢分析器
--添加主鍵約束(stuNo作為主鍵,stuInfo為表名)
alter table stuInfo
add constraint PK_stuNo PRIMARY KEY (stuNo)
--添加唯一約束
alter table stuInfo
add constraint UQ_stuID UNIQUE (stuID)
--添加默認約束(地址不填,默認為地址不詳)
alter table stuInfo
add constraint DF_stuAddress DEFAULT ('地址不詳') FOR stuAddress
--添加檢查約束 要求年齡在15-40歲之間
alter table stuInfo
add constraint CK_stuAge CHECK(stuAge BETWEEN 15 AND 40)
添加外鍵約束 (表名stuMarks stuInfo)
alter table stuMarks
add constraint FK_stuNo FOREIGN KEY(stuNo) REFERENCES stuInfo(stuNo)